MongoDB仅在两个不同的字段相同时才匹配$ in

时间:2018-09-27 16:22:16

标签: node.js mongodb mongoose

mongoDB查询构造遇到一些问题。我有一个要用于获取帖子的用户ID数组。但是,我只想返回由用户的朋友创建的讨论的帖子(这些ID存储在数组中),并且创建该讨论的用户仍在“参与”讨论中。对于第一部分,我可以简单地执行$ in查询:

UIDArray = ['1ab','2bc','3cd']
Posts.find({created_by: {$in: UIDArray}}) 

但是,我们需要一个查询,其中“朋友”(UID数组中的用户)创建了讨论,但仍在参与讨论。我最初想到做以下事情:

Discussions.find({created_by: {$in: UIDArray}, participating: {$in: UIDArray}})

现在,这显然行不通;由于UIDArray包含所有朋友的UID,因此它将错误地返回由朋友 1ab 创建的讨论(该讨论可能已经离开讨论,因此不再存储在参与的数组中),但仍然具有< strong> 2bc 参与。

如何确保查询仅返回创建该查询并存储在created_by字段中的用户仍在参与字段(即数组)中的讨论?

1 个答案:

答案 0 :(得分:2)

您可以将Aggregation Framework的$match$expr一起使用,以指定包含多个字段的条件:

Discussions.aggregate([
    {
        $match: {
            $expr: {
                $and: [ 
                    { $in: [ "$created_by", ['1ab','2bc','3cd'] ] },
                    { $in: [ "$created_by", "$participating" ] }
                ]
            }
        }
    }
])