文档菜单
文档首页
/
MongoDB 手册
/ / /

$setEquals (聚合)

在本页

  • 定义
  • 行为
  • 示例
$setEquals

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

$setEquals 语法如下

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

参数可以是任何有效的表达式,只要它们每个都解析为数组。有关表达式更多信息,请参阅 表达式运算符。

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

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

示例
结果
{ $setEquals: [ [ "a", "b", "a" ], [ "b", "a" ] ] }
true
{ $setEquals: [ [ "a", "b" ], [ [ "a", "b" ] ] ] }
false

考虑一个具有以下文档的 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 字段。

  • $setEquals 操作符的结果输出到名为 sameFlavors 的新字段中。

操作返回以下结果

{
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