猫鼬只找到那些在另一个 collection 中有条目的人

Mongoose find only those who have an entry in another collection

我正在尝试使用 mongoose 在 collection 中查找条目,但我只想要在另一个 collection.

中有条目的条目

更具体地说: 我有一个 collection 'post'

    var postSchema = new Schemas({
    postedBy:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
    postContent: String
});

一个collection'group':

    var groupSchema = new Schemas({
    name: String,
    creator:{type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    interes: String,
    public: Boolean
});

和一个collection 'groupMember':

var groupMemeberSchema = new Schemas({
    group:{type: mongoose.Schema.Types.ObjectId, ref: 'Group'},
    user:{type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});

我想要的是从用户所属的组中检索所有 post。 类似于:

    groupmembers.find({user: req.user._id}, (err, groupsThatTheUserIn) => {
        post.find(({$where: this.group EXIST_IN(groupsThatTheUserIn)}, (err, posts) => {
            res.json(posts);
    }))

})

但是它们在 mongoose

中没有 exist_in() 函数

要从用户所属的组中检索所有 post,您可以使用聚合框架,其中 $lookup 可供您使用使用单个查询加入相关集合。

例如,运行 以下聚合操作将 return 所需的 posts:

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))