通过比较文档中的片段进行查询

时间:2015-05-12 18:07:35

标签: mongodb mongodb-query

我查询的文档有两个子部分OldResultsNewResults。我想要做的是查找OldResults != NewResults所有文件。在Mongo中可以进行这样的查询吗?请注意OldResults&的架构NewResults对于不同的文档可能有所不同,但在同一文档中它们应该是相同的。

@chridam这是我得到的例外:

Error("Printing Stack Trace")@:0
()@src/mongo/shell/utils.js:37
([object Array])@src/mongo/shell/collection.js:866
@(shell):10

uncaught exception: aggregate failed: {
    "errmsg" : "exception: invalid operator '$setEquals'",
    "code" : 15999,
    "ok" : 0
}

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以尝试使用 aggregation framework ,特别是$setEquals运算符,因为它会比较两个或更多数组,如果它们具有相同的不同元素则返回true,否则返回false:

Classroom

让我们用几个测试文档证明这一点:

db.collection.aggregate([
    {
        "$project": {
            "NewResults": 1,
            "OldResults": 1,
            "AreResultsSame": { "$setEquals": [ "$NewResults", "$OldResults" ] }
        }
    },
    {
        "$match": { "AreResultsSame": false }
    }
]);

因此上述聚合将输出db.collection.insert([ { _id: 1, OldResults: [ { a: 1, b: 1 }, { a: 1, b: 2 } ], NewResults: [ { a: 1, b: 1 }, { a: 1, b: 2 } ] }, { _id: 2, OldResults: [ { a: 1, b: 1 }, { a: 1, b: 2 } ], NewResults: [ { a: 1, b: 2 }, { a: 1, b: 2 } ] } ]) 的文档,因为2个数组不相同:

<强>输出

_id: 2