我无法访问任何_id
对象的mongoose.model
。我知道有很多类似的答案,但是都没有解决我的问题。我正在使用mongoose
和TypeScript
。
我有一个现有集合,其中包含具有现有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()
,并且可以选择。
答案 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。