猫鼬无法获得不是对象ID的_id

时间:2020-11-02 22:07:17

标签: javascript node.js typescript mongoose

我无法访问任何_id对象的mongoose.model。我知道有很多类似的答案,但是都没有解决我的问题。我正在使用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
});

注意

如果我通过猫鼬创建文档记录,则会将_id创建为ObjectId(),并且可以选择。

1 个答案:

答案 0 :(得分:2)

猫鼬期望_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。