我正在尝试执行一个查询,该查询抓取用户列表并为查询中抓取的所有用户填充其中一个字段。出于某种原因,我无法让它发挥作用。但是,如果我删除查询中的populate
行,那么我会得到我的结果,但没有填充的字段。这就是我所拥有的:
var contactSchema = mongoose.Schema({
name : String,
title: String,
company: {
type: String,
ref: 'Company'
},
favorite: {
type: String,
ref: 'Favorite'
}
});
contactSchema.methods.getAllContacts = function(company_id, cb) {
return this.model('Contact')
.find({company: company_id})
.populate('favorite') // my query is successful if I leave out this line
.sort({name: 'asc'})
.exec(function (err, data) {
if (err) {
console.log('ERROR = ' + err);
cb(null, false);
} else {
cb(null, data);
}
});
};
module.exports = mongoose.model('Contact', contactSchema);
我做错了什么?
答案 0 :(得分:0)
解决方案涉及修改populate语句:
.populate({
path: 'favorite',
match: { _id: {$not: {$size: 0}}}
})
正如上面的评论中所建议的那样,它处理其中一个文档包含空字符串的情况。