node.js - MongooseJS 使用 find 通过引用查找

标签 node.js mongodb express mongoose

我有这个 Mongoose 模式。

var mongoose = require ('mongoose')
  , dev      = require ('../db').dev ();

var schema = new mongoose.Schema ({
  date: {
    type: Date,
    default: Date.now
  },
  company: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Company'
  },
  questionnaire: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Questionnaire'
  }
});

module.exports = dev.model ('Survey', schema);

我只想查找具有特定公司 ID 的调查。我怎么做?我试过(用我的 Express 处理程序):

app.get ('/survey', function (req, res) {
  Survey.find ({ company: req.query.company }).populate ('questionnaire').exec (function (err, surveys) {
    return res.json (surveys);
  });
});

最佳答案

在您最近的评论中,您说 Surveys 集合的 company 字段实际上是一个字符串,而不是 ObjectId,这就是它不起作用的原因。因为您的模式定义将 company 声明为 ObjectId,Mongoose 会将您的 req.query.company 值转换为 ObjectId,然后在 Surveys 中查询文档> 他们的 company 属性是一个具有相同值的 ObjectId。因此,如果 company 是数据库中的字符串,它将不匹配。

如果您将 Surveys 中的 company 值更新为 ObjectId 而不是字符串,那么这将起作用。

关于node.js - MongooseJS 使用 find 通过引用查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587147/

相关文章:

node.js - 具有 native react 的 Axios 不返回文档并使应用程序崩溃

mysql - 无法读取 Node JS 中未定义的属性 'name'

javascript - 当两个事件同时触发时如何解决promise?

node.js - Node.Js + Expressjs 中的继承

mongodb聚合大数据,如何限制分组推送?

mongodb - Mongoose 中的 findByIdAndUpdate() 和 findOneAndUpdate() 有什么区别?

javascript - process.env.NODE_ENV 是否自动设置为 'production' ?

AppFog 上的 Node.JS 应用程序响应 503 服务不可用

json - ExpressJS/AngularJS : Converting JSON Object to String

javascript - 等待 Mongoose 执行完成