猫鼬在填充后使用的地方

时间:2015-01-08 19:57:36

标签: javascript mongodb mongoose

我有一个获取用户帖子的查询,我希望只显示访问者所选国家/地区的帖子。

到目前为止,我正在尝试这样做:

  var country = req.query.country || req.session.country || { $ne: '' };
  Posts.find({})
      .populate('_creator')
      .where('_creator.country').equals(country)
      .exec(function(err, posts) {
           console.log(posts);
  });

不幸的是它不起作用。

我怎样才能有类似的查询?

编辑:

这是帖子架构:

var postsSchema = new mongoose.Schema({
    _creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
    text: { type: String, default: '' },
    created_at: Date
});

1 个答案:

答案 0 :(得分:8)

您不能在查询中包含填充字段,因为populate在初始查询完成后作为单独的查询执行。

有效执行此类查询的一种方法是首先查找所选国家/地区的用户的ID,然后查询这些用户的帖子。

// Get the _ids of the users of the selected country.
User.find({country: country}, {_id: 1}, function(err, users) {

    // Map the user docs into an array of just the _ids
    var ids = users.map(function(user) { return user._id; });

    // Get the posts whose _creator is in that set of ids
    Post.find({_creator: {$in: ids}}).populate('_creator').exec(function(err, posts) {
        // posts contains your answer
    });
});