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" ] }
]
}
}
}
])