2016-02-18 118 views
1

有一个文档集合是这样的:的MongoDB和嵌套元素搜索

{ 
    "objects": [ 
    { 
     "a": 1, 
     "prop":2, 
    }, 
    { 
     "a": 2, 
     "prop":3 
    } 
    ] 
} 

还有就是要找到具有相同属性的子文档文件的任务。比方说,需要找到包含与物业和== 1 两个嵌套的文件我建了一个条件的文档:

{ 
    "objects": { "$elemMatch": { "$and": [ {"a":1}, { "a":1} ]} } 
} 

{ 
    'objects': { $elemMatch: {'a': 1}, $size: 2 } 
} 

这个查询将返回按预期的我的文档那里是与物业“A” = 1和“A” = 2,“A” = X等任何子..这里是如何让他给我的只有那些文件,其中有两个子文档的请求用的= 1 理想的属性应该返回此类型的稿件:

{ 
    "objects": [ 
    { 
     "a": 1, 
     "prop":5 
    }, 
    { 
     "a": 1, 
     "prop":6 
    } 
    ] 
} 

应该返回有两个嵌套子阵列与属性的文件“A” = 1

我会任何帮助

回答

0

非常感谢,请尝试用$redact运营商不必通过.aggregate()

随着​​操作者来过滤的object.a值为1,然后通过$eq$size滤波结果与2的大小相匹配。最终通过$redact输出结果。

db.collection.aggregate([{ 
    $redact: { 
     $cond: [ 
      {$eq: [ 
        {$size: { 
         $filter: { 
            input: '$objects', 
            as: 'item', 
            cond: {$eq: ['$$item.a', 1]} 
        }}}, 
        2] 
      }, 
     '$$KEEP', 
     '$$PRUNE' 
     ]} 
}]); 
+0

工作!非常感谢 ! – yuriyant