Mongoose 只查找那些在另一个集合中有条目的人

Posted

技术标签:

【中文标题】Mongoose 只查找那些在另一个集合中有条目的人【英文标题】:Mongoose find only those who have an entry in another collection 【发布时间】:2018-07-28 22:25:38 【问题描述】:

我正在尝试使用 mongoose 在集合中查找条目,但我只想要在另一个集合中有条目的条目。

更具体地说: 我有一个收藏“帖子”

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

一个集合'组':

    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() 函数的

【问题讨论】:

【参考方案1】:

要从用户所属的组中检索所有帖子,您可以使用聚合框架,其中 $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))

【讨论】:

非常感谢。事实上,他们不需要加入“群”、“帖子”单独完成这项工作。 @davdsb 你是绝对正确的,会更新我的答案

以上是关于Mongoose 只查找那些在另一个集合中有条目的人的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 在数据库中查找最后十个条目

Mongoose 聚合查找 - 如何按特定 id 过滤

在 mongoose 中使用查找填充一个集合

如何使用另一个集合 mongoose 查找子查询文档

使用 Mongoose 查找和计数集合元素

节点,猫鼬“findOne”在另一个集合的“find”内的一个集合上