定义
$setEquals比较两个或多个数组,如果它们具有相同的不同元素,则返回
true,否则返回false。$setEquals通过以下语法实现:{ $setEquals: [ <expression1>, <expression2>, ... ] }
行为
$setEquals performs set operation on arrays, treating arrays as sets. If an array contains duplicate entries, $setEquals ignores the duplicate entries. $setEquals ignores the order of the elements.
If a set contains a nested array element, $setEquals does not descend into the nested array but evaluates the array at top-level.
例子 | 结果 | 注意 | ||||
|---|---|---|---|---|---|---|
|
| 这两个数组不包含相同的元素。 | ||||
|
| 这两个数组不包含相同的元素。 | ||||
|
| 两个数组都包含相同的唯一元素。当视为集合时,第一个大量为 | ||||
|
| 数组中的元素不相等。第一个大量包含字符串 | ||||
|
| 数组中的元素不相等。第一个大量为空,第二个大量有两个字符串元素。 | ||||
|
| 这些数组不包含相同的唯一元素。第一个大量仅包含 |
例子
请考虑包含以下文档的 bakeryOrders 集合:
db.bakeryOrders.insertMany( [ { _id: 0, cakes: ["chocolate", "vanilla"], cupcakes: ["chocolate", "vanilla"] }, { _id: 1, cakes: ["chocolate", "vanilla"], cupcakes: ["vanilla", "chocolate"] }, { _id: 2, cakes: ["chocolate", "chocolate"], cupcakes: ["chocolate"] }, { _id: 3, cakes: ["vanilla"], cupcakes: ["chocolate"] }, { _id: 4, cakes: ["vanilla"], cupcakes: [] } ] )
The following operation uses the $setEquals operator to determine if the cakes array and the cupcakes array in each order contain the same flavors:
db.bakeryOrders.aggregate( [ { $project: { _id: 0, cakes: 1, cupcakes: 1, sameFlavors: { $setEquals: [ "$cakes", "$cupcakes" ] } } } ] )
注意
$project
$project 阶段指定输出文档中包含哪些字段。在此示例中,$project 阶段:
从输出中排除
_id字段。在输出中包含
cakes和cupcakes字段。在名为
sameFlavors的新字段中输出$setEquals操作符的结果。
操作返回以下结果:
{ cakes: [ "chocolate", "vanilla" ], cupcakes: [ "chocolate", "vanilla" ], sameFlavors: true }, { cakes: [ "chocolate", "vanilla" ], cupcakes: [ "vanilla", "chocolate" ], sameFlavors: true }, { cakes: [ "chocolate", "chocolate" ], cupcakes: [ "chocolate" ], sameFlavors: true }, { cakes: [ "vanilla" ], cupcakes: [ "chocolate" ], sameFlavors: false }, { cakes: [ "vanilla" ], cupcakes: [], sameFlavors: false }