我有两个使用Mongoose 的模式
模式1
var schema = mongoose.Schema({
name: {
type: String,
required: true
}
});
return mongoose.model('User', schema);
模式2
var schema = mongoose.Schema({
name: {
type: String,
required: true
},
user: {
type: mongoose.Schema.ObjectId,
ref: 'User',
required: true
}
});
return mongoose.model('Page', schema);
页面集合中的我的数据
_id
551b0cdf63dc96e9c39de0f8
551b0d1563dc96e9c39de0f9
551b0d2d63dc96e9c39de0fa
551b0d4363dc96e9c39de0fb
551daae0f4cb312c62dcbc1e
名称
卡扎奎斯托
俄罗斯
中国
澳大利亚
萨尔瓦多
用户
5515c7aaaf6d59fea26d7185
5515c7aaaf6d59fea26d7185
5515c7aaaf6d59fea26d7185
5515c7aaaf6d59fea26d7185
5515c7c9af6d59fea26d7186
当我按用户在模式2中搜索时,我找不到任何结果。
猫鼬翻译猫鼬错误地转换了查询。
查询
var test = Page.find().select("_id").where({"user" : "5515c7aaaf6d59fea26d7185"}).exec()
.then(function (t) {
console.log("hi", t);
});
查询翻译错误
db.pages.find({ user: ObjectId("5515c7aaaf6d59fea26d7185") })
无结果
按应查询
db.pages.find({ user: "5515c7aaaf6d59fea26d7185" })=
4个结果
有什么建议可以解决这个问题吗?
如果user
是页面文档中的字符串,则您的架构需要反映该字符串,否则Mongoose将尝试将其强制转换为架构中的类型(在本例中为ObjectId
)。
因此,使user
成为模式中的字符串:
var schema = mongoose.Schema({
name: {
type: String,
required: true
},
user: {
type: String,
ref: 'User',
required: true
}
});
我解决了传递objectId而不是字符串的问题