我不知道这是一个猫鼬错误还是我做错了什么,我的问题是:
我在mongoDB中有一些文件,这些文件有一个名为address的属性,里面有一个国家,它是一个对象id但是当我使用mongoose进行查询时,这个国家的id变为“null”:
Mongoose Schema
{
password: {
type: String,
trim: true,
required: true,
index: true
},
email: {
type: String,
trim: true,
required: true,
index: {
unique: true
}
},
address: {
address: {
type: String,
default: ''
},
city: {
type: String,
default: ''
},
zipCode: {
type: String,
default: ''
},
country: {
type: Schema.ObjectId,
ref: 'Country',
default: '54e635cb4ef1d41d99b837e8',
required: true
}
}
}
MongoDB文档:
{
"_id" : ObjectId("54b7ff802d244c9f224c78f4"),
"password" : "12345",
"email" : "email@email.com",
// ...
"address" : {
"country" : ObjectId("54e635cb4ef1d41d99b837e8"),
"zipCode" : "",
"city" : "",
"address" : ""
}
}
猫鼬查询
Model.findOne({
email: 'email@email.com',
password: '12345'
}, function(err, model) { /* ... */ });
猫鼬回应
{
"_id": "54b7ff802d244c9f224c78f4",
"email": "email@email.com",
"password" : "12345",
// ...
"address": {
"country": null,
"zipCode": "",
"city": "",
"address": ""
}
}
我真的不知道为什么国家会变为空。 我的Mongo版本是2.6.6,而猫鼬版本是3.8.21。
有什么想法吗?
答案 0 :(得分:1)
可以使用populate
修复此问题Model.findOne({
email: 'email@email.com',
password: '12345'
}).populate('address country').exec(function (error, user) {
// ...
});
答案 1 :(得分:0)
我已经解决了,我将描述我是如何解决它的:
将mongoose更新为3.8.23(我认为这没有任何区别)。
当我运行init脚本时,脚本会导入带有国家/地区数据的csv doc,因此每个mongoimport上的国家_id都会发生变化。所以我制作了一个mongodump,现在在init脚本中我恢复了集合而不是导入它。
我认为最后一点因为_id而产生了不同;在模式中我设置了一个在集合中不存在的默认ObjectId,这就是为什么我决定进行恢复,以保存所有_id的。