繁体   English   中英

在Mongoose中使用ObjectID的数据模型参考

[英]Data model reference using ObjectID in Mongoose

我有两个猫鼬模型的用户和请求。 一个用户可以有多个请求。 为了链接这两个数据模型,我在Request模型中引用了用户的objectID。 但是,当我尝试获取特定用户ID的所有请求时,没有任何结果。

用户

    var UserSchema = new Schema({
      name: String,
      username: String
    });
module.exports = mongoose.model('User', UserSchema);

要求

var RequestSchema = new Schema({
  type: String,
  user_id: { type : mongoose.Schema.Types.ObjectId, ref: 'User'}
});
module.exports = mongoose.model('Request', RequestSchema);

以下是基于URL中传递的用户ID提取请求的示例代码

exports.getRequests = function (req, res, next) {
      var userId = req.params.id;
      console.log('USER ID'+userId);

      Request.findOne({'user_id': 'kenan'}, function (err, request) {
        if (err) return next(err);
        if (!requests){
            console.log('NO REQUEST FOUND');
            return res.send(401);
        }
        res.json(request);
      });
};

我知道我正在使用findOne,它将返回我一个资源。 但是,这失败了,我没有任何结果。 我的数据库中有填充的数据。 以下是用于获取请求的URL。

http://localhost:9000/api/V1/users/547ee1e82e47bb982e36e433/requests

请帮助建议我在这里做错了什么。

谢谢

一旦执行find()就需要填充对用户的引用。

  • 找到所有请求后,您需要解析对用户的引用。 使用填充来解析引用。
  • 解决后,根据您要搜索的name过滤请求。

更新的代码:

Request
.find().populate({'path':'user_id',match:{'name':'kenan'}})
.exec(function (err, resp) {
  var result = resp.filter(function(i){
    return i.user_id != null;
  });
 console.log(result);
})

好的,以上答案是正确的,感谢您的答复。 我错误地填充了我的请求集合。 这只是每个人的其他知识。 当您将对象ID引用作为集合中的字段之一时,请确保插入的是对象ID对象,而不仅仅是数字值。

错误

{ "_id" : ObjectId("54803ae43b73bd8428269da3"), "user_id" : "547ee1e82e
47bb982e36e433", "name" : "Test", "service_type" : "test", "version" : "10"
, "environment" : "test", "status" : "OK", "__v" : 0 }

正确

{ "_id" : ObjectId("54803ae43b73bd8428269da3"), "user_id" : ObjectId("547ee1e82e
47bb982e36e433"), "name" : "test", "service_type" : "test", "version" : "10"
, "environment" : "test", "status" : "OK", "__v" : 0 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM