我们如何使用节点js使用populate方法引用mongodb

时间:2016-08-30 18:02:04

标签: javascript node.js mongodb

我在节点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\""}

1 个答案:

答案 0 :(得分:0)

错误消息表明您正在传递字符串而不是ObjectID。 基本上mongodb中的默认id不是普通字符串。 它是一个唯一的12字节标识符。

因此,您应该将字符串转换为ObjectID类型。

var query = {userId: mongoose.Types.ObjectId(stringId)};