我正在尝试使用mongoose在集合中查找条目,但我只想要在另一个集合中有条目的条目。
更具体一点: 我有一个'post'集合
var postSchema = new Schemas({
postedBy:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
postContent: String
});
集合'group':
var groupSchema = new Schemas({
name: String,
creator:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
interes: String,
public: Boolean
});
和一个集合'groupMember':
var groupMemeberSchema = new Schemas({
group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
user:{type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});
我想要的是从用户所属的组中检索所有帖子。 类似的东西:
groupmembers.find({user: req.user._id}, (err, groupsThatTheUserIn) => {
post.find(({$where: this.group EXIST_IN(groupsThatTheUserIn)}, (err, posts) => {
res.json(posts);
}))
})
但他们在mongoose中没有exists_in()函数
答案 0 :(得分:0)
要从用户所属的组中检索所有帖子,您可以使用聚合框架,其中 $lookup
可供您使用单个查询加入相关集合。
例如,运行以下聚合操作将返回所需的帖子:
groupmembers.aggregate([
{ "$match": { "user": mongoose.Types.ObjectId(req.user._id) } },
{
"$lookup": {
"from": "posts",
"localField": "group”,
"foreignField": "group",
"as": "posts"
}
},
{
], (err, results) => res.json(results[0].posts))