在MongoDb查询中使用$ map

时间:2015-03-30 17:15:56

标签: mongodb

有没有办法在常规的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] }
    }
 }}

1 个答案:

答案 0 :(得分:1)

您无法在$match阶段或查找查询中执行此操作。您需要使用$project阶段添加可以$match开启的字段:

> db.test.aggregate([
    { "$project" : { 
        "ok" : { "$map" : { "input" : "$x", "as" : "s", "in" : { "$setIsSubset" : [ "$$s", auths] } } }
    } },
    { "$match" : { "ok" : true } }
])

您可以调整$project以包含原始文档中的其他字段。