Docs 菜单
Docs 主页
/
数据库手册
/ / /

$setEquals(聚合)

$setEquals

比较两个或多个数组,如果它们具有相同的不同元素,则返回 true,否则返回 false

$setEquals 通过以下语法实现:

{ $setEquals: [ <expression1>, <expression2>, ... ] }

参数可以是任何有效的表达式,只要它们都能解析为大量即可。 有关表达式的更多信息,请参阅表达式。

$setEquals对数组执行集合操作,将数组视为集合。如果数组包含重复条目,$setEquals 会忽略重复条目。$setEquals 会忽略元素的顺序。

如果集合包含嵌套数组元素,$setEquals不会下降进入嵌套数组,而是在顶层计算数组。

例子
结果
注意
{ $setEquals: [
[ "a", "c" ],
[ "a", "b" ]
] }

false

这两个数组不包含相同的元素。

{ $setEquals: [
[ "a", "c" ],
[ "a", "b", "c" ]
] }

false

这两个数组不包含相同的元素。

{ $setEquals: [
[ "a", "b", "a" ],
[ "b", "a" ]
] }

true

两个数组都包含相同的唯一元素。当视为集合时,第一个大量为 [ "a", "b" ],因为重复项将被忽略。

{ $setEquals: [
[ "a", "b" ],
[ [ "a", "b" ] ]
] }

false

数组中的元素不相等。第一个大量包含字符串 "a""b",第二个数组包含大量[ "a", "b" ]

{ $setEquals: [
[ ],
[ "a", "b" ]
] }

false

数组中的元素不相等。第一个大量为空,第二个大量有两个字符串元素。

{ $setEquals: [
[ "a", "a" ],
[ "a", "b" ]
] }

false

这些数组不包含相同的唯一元素。第一个大量仅包含 "a",而第二个大量包含 "a""b"

请考虑包含以下文档的 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: [] }
] )

以下操作使用$setEquals操作符来确定每个订单中的cakes大量和cupcakes大量是否包含相同的口味:

db.bakeryOrders.aggregate(
[
{
$project: {
_id: 0,
cakes: 1,
cupcakes: 1,
sameFlavors: { $setEquals: [ "$cakes", "$cupcakes" ] }
}
}
] )

注意

$project

$project 阶段指定输出文档中包含哪些字段。在此示例中,$project 阶段:

  • 从输出中排除 _id 字段。

  • 在输出中包含 cakescupcakes 字段。

  • 在名为 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
}

后退

$setDifference

在此页面上