如何填充包含多个搜索结果的查询?

时间:2015-02-26 02:35:30

标签: mongoose

我正在尝试执行一个查询,该查询抓取用户列表并为查询中抓取的所有用户填充其中一个字段。出于某种原因,我无法让它发挥作用。但是,如果我删除查询中的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);

我做错了什么?

1 个答案:

答案 0 :(得分:0)

解决方案涉及修改populate语句:

.populate({
    path: 'favorite',
    match: { _id: {$not: {$size: 0}}}
})

正如上面的评论中所建议的那样,它处理其中一个文档包含空字符串的情况。