node.js - Mongoose 中使用 ObjectID 的数据模型引用

标签 node.js mongodb mongoose

我有两个 Mongoose 模型用户和请求。一个用户可以有多个请求。为了链接这两个数据模型,我在请求模型中引用用户的 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

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

谢谢

最佳答案

您需要populate执行 find() 后对用户的引用。

  • 找到所有请求后,您需要解析对 用户。使用 populate 解析引用。
  • 解析后,根据您的名称过滤请求 正在寻找。

更新的代码:

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);
})

关于node.js - Mongoose 中使用 ObjectID 的数据模型引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286742/

相关文章:

javascript - 使用嵌入文档列表和使用 ObjectId 列表之间有区别吗?

javascript - 如何从 mlab 数据库检索记录

javascript - 使用 Mongoose 在 Node.js 中存储一对多关系

javascript - 无法从 Mongoose 数组中删除元素

javascript - 在 Windows 服务器中无限期运行 node.js 文件有哪些不同的方法?

node.js - Google 回调时 GoogleStrategy 不会被触发

html - 为什么我不能将我的 css 链接到我的 ejs 文件?

javascript - 查询中的 mongodb/javascript 变量

mongodb - 从聚合中批量删除文档

node.js - 每个用户的个人 Mongoose 模式