有没有办法使用 $map
常规 Mongo 文档查询中的运算符(或聚合 $match
,我认为这是同一件事)。
因此,我正在尝试做的是:给定一组集合,如果其中任何一组是参数的子集,则返回文档。
例子:
假设我有三个文档:
{ x : [ ["A","B"] ] }
{ x : [ ["A", "D"] ] }
{ x : [ ["A","B"], ["A","D"] ] }
我有一个数组
auths = ["A","B","C"]
我想运行查询以获取第一个和第三个文档,因为它们都包含集合 ["A","B"]
这是 auths
的子集, 但不是第二个文档,因为它的唯一集合包含 D
这不在 auths
的集合中
如果我在 $redact
中这样做pipeline 我可以通过以下方式做到这一点:
{"$anyElementTrue" : {
"$map" : {
"input": "$x",
"as": "s",
"in": { "$setIsSubset": ["$$s", auths] }
}
}}
但是当我尝试将其作为查询运行时,我得到了
BadValue unknown top level operator: $anyElementTrue
最佳答案
您不能在 $match
阶段或查找查询中执行此操作。您将需要使用 $project
阶段来添加一个您可以$match
的字段:
> db.test.aggregate([
{ "$project" : {
"ok" : { "$map" : { "input" : "$x", "as" : "s", "in" : { "$setIsSubset" : [ "$$s", auths] } } }
} },
{ "$match" : { "ok" : true } }
])
您可以调整 $project
以包含原始文档中的任何其他字段。
关于mongodb - 在 MongoDb 查询中使用 $map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352267/