【发布时间】:2017-07-01 21:56:58
【问题描述】:
经过 db.collection.aggregate 中的一些“匹配”步骤后,我得到了
{_id: 1, field1: "a", field2: ["1.1.1", "1.1.2", "1.1.3", "1.1.4"]}
{_id: 2, field1: "b", field2: [ "1.1.2", "1.1.4"]}
{_id: 3, field1: "c", field2: ["1.1.1", "1.1.2" ]}
{_id: 4, field1: "d", field2: [ "1.1.4"]}
{_id: 5, field1: "e", field2: [ "1.1.3" ]}
// 我做了预格式化
我想应用另一个规则(我想它会是“组”规则)以获取“field2”不包含“1.1.1”或“1.1.4”的所有文档。所以我需要没有“1.1.1”或“1.1.4”或(“1.1.1”和“1.1.4”)的文件。
我想得到这样的东西:
{_id: 5, field1: "e", field2: [ "1.1.3" ]}
所以,我有 field2,它是每个文档中的数组,我想获取给定数组中没有单个元素的所有文档(例如 [“1.1.1”,“1.1.4”])。
附:我需要这个用于“单语句聚合命令”。不接受额外的 JS。
更新
@blakes-7, tnx
我的错误是我用过
{ "$match": { "field2": { "$elemMatch": { "$nin": ["1.1.1","1.1.4"] } } } }
但正确的做法就是使用
{ "$match": { "field2": { "$nin": ["1.1.1","1.1.4"] } } }
不要高估 $elemMatch :)
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework