我在节点js中使用populate方法进行引用,但我对populate方法一无所知。在此代码中,我是来自我的子集合的用户集合的引用。我有两个集合,一个孩子和第二个用户
此子集
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
index: true
}
这是用户集合
"firstname":{type:String},
"lastname":{type:String}
我从URL(http://localhost:8000/v1/childPopulate/:57a4e4e67429b91000e225a5)发送了id,并在子模式中查询了我存储的userId
这是节点js
this.childPopulate = function(req, res, next){
var o_userid = req.params.id;
var query = {userId:o_userid};
Child.findOne(query).populate({
path: 'userId',
model: 'User',
select: 'firstname lastname'
}).exec(function(err,userinfo){
if(err){
return next(err);
}else{
res.send(userinfo);
console.log(userinfo);
}
});
};
但这会在浏览器中显示此错误
{"message":"Cast to ObjectId failed for value \":57a4e4e67429b91000e225a5\" at path \"userId\""}
答案 0 :(得分:0)
错误消息表明您正在传递字符串而不是ObjectID。 基本上mongodb中的默认id不是普通字符串。 它是一个唯一的12字节标识符。
因此,您应该将字符串转换为ObjectID类型。
var query = {userId: mongoose.Types.ObjectId(stringId)};