我有这个Mongoose Schema。
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);
});
});
答案 0 :(得分:7)
在您的最新评论中,您说company
集合的Surveys
字段实际上是字符串而不是ObjectId,这就是为什么这不起作用。由于您的架构定义将company
声明为ObjectId,因此Mongoose会将您的req.query.company
值转换为ObjectId,然后在Surveys
中查询其company
属性为ObjectId的文档。相同的价值。因此,如果company
是数据库中的字符串,则它将不匹配。
如果您将company
中的Surveys
值更新为ObjectIds而不是字符串,那么这将有效。
答案 1 :(得分:0)
你试过'company._id
app.get ('/survey', function (req, res) {
Survey.find ({ 'company._id': req.query.company }).populate ('questionnaire').exec (function (err, surveys) {
return res.json (surveys);
});
});
答案 2 :(得分:0)
对我有用的(并在已接受的答案中有所提示)是确保通过猫鼬(即通过您的快递服务器)创建文档,因为这将强制将架构加载到它们上,因此id将是存储为objectIds。
最初,我是使用objectIds作为简单字符串通过数据库手动创建文档的,这会导致查询无法正常工作,因为mongo(从您的服务器)将id转换为ObjectId。