簡體   English   中英

無法使用貓鼬獲取不是 ObjectID 的 _id

[英]Unable to get _id which is not ObjectID with mongoose

我無法訪問任何mongoose.model對象的_id 我知道有很多類似的答案,但沒有一個能解決我的問題。 我正在使用mongooseTypeScript

我有現有的集合,其中包含具有現有Mixed _id數據:

{
   _id: 10,
   name: "someString",
   email: "someString",
}
...

我有架構和界面:

const UserModel: Schema = new Schema({
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
});

export interface IUser extends Document {
    name: string;
    email: string;
}

export default mongoose.model<IUser>('User', UserModel);

我嘗試選擇一些用戶:

UserModel.findOne({email:data.email}).then((user)=>{
    console.log(user);
    // I get everything without _id
    // { name: "someString", email: "someString" } 
    console.log(user.id);
    // null
});

另一種嘗試

我還嘗試在選項中將_id設置為false

const UserModel: Schema = new Schema({
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
}, { _id: false });

我嘗試選擇一些用戶:

UserModel.findOne({email:data.email}).then((user)=>{
    console.log(user);
    // I get everything with _id
    // { _id: 10, name: "someString", email: "someString" } 
    console.log(user.id, user._id);
    // but it is not accessible
    // null, undefined
});

筆記

如果我通過 mongoose 創建文檔記錄,它會創建_id作為ObjectId()並且它是可選的。

Mongoose 需要_id的 ObjectID

將您的自定義類型添加到架構

const UserModel: Schema = new Schema({
    _id: { type: mongoose.Schema.Types.Mixed, required: true },
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
});

_id索引無法修改,所以不用擔心添加索引選項。

通常最好讓 Mongo 使用它的 ObjectID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM