我查询的文档有两个子部分OldResults
和NewResults
。我想要做的是查找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
}
答案 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