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创建的讨论(该讨论可能已经离开讨论,因此不再存储在参与的数组中),但仍然有2bc参与。

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

最佳答案

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

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

10-06 03:09