我有一个获取用户帖子的查询,我希望只显示访问者所选国家/地区的帖子。
到目前为止,我正在尝试这样做:
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
});
答案 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
});
});