有没有办法在常规的Mongo文档查询中使用$map
运算符(或者我认为是相同的聚合$match
)。
我正在尝试做的是:给定一组集合,如果任何集合是参数的子集,则返回文档。
示例:
假设我有三个文件:
{ x : [ ["A","B"] ] }
{ x : [ ["A", "D"] ] }
{ x : [ ["A","B"], ["A","D"] ] }
我有一个数组
auths = ["A","B","C"]
我想运行一个查询,在那里我找回第一个和第三个文档,因为它们都包含["A","B"]
的集合auths
,而不是第二个文档,因为它的唯一集合包含{ {1}}不在D
如果我在auths
管道中执行此操作,我可以使用以下内容执行此操作:
$redact
但是当我尝试将其作为查询运行时,我得到了
{"$anyElementTrue" : {
"$map" : {
"input": "$x",
"as": "s",
"in": { "$setIsSubset": ["$$s", auths] }
}
}}
答案 0 :(得分:1)
您无法在$match
阶段或查找查询中执行此操作。您需要使用$project
阶段添加可以$match
开启的字段:
> db.test.aggregate([
{ "$project" : {
"ok" : { "$map" : { "input" : "$x", "as" : "s", "in" : { "$setIsSubset" : [ "$$s", auths] } } }
} },
{ "$match" : { "ok" : true } }
])
您可以调整$project
以包含原始文档中的其他字段。