MongoDB聚合运算符:$setEquals

发布于:2024-04-26 ⋅ 阅读:(26) ⋅ 点赞:(0)

MongoDB聚合运算符:$setEquals


$setEquals聚合运算符用于比较两个或多个数组,如果它们有相同的不重复的元素,则返回true,否则返回false。

语法

{ $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" ] }
         }
      }
   ] )

操作返回下面的结果:

{
 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
}