MongoDB聚合运算符:$setEquals

news/2024/10/22 16:49:47/

MongoDB聚合运算符:$setEquals

文章目录

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

http://www.ppmy.cn/news/1442531.html

相关文章

2024最新AIBotPro开源码AI Web 应用支持GPT-4全模型

2024最新AIBotPro开源码AI Web 应用支持GPT-4全模型&#xff0c; 支持AI绘画/插件联网/自定义插件/AI知识库等等。 内有详细的图文搭建教程

Q1笔记本电脑线上市场发展现状:大盘下滑,深耕细分市场是机会

今年&#xff0c;宏观经济环境的恶化和笔记本电脑需求的持续放缓&#xff0c;导致全球笔记本电脑出货量&#xff0c;尤其是线上市场的整体状态不容乐观。 根据鲸参谋数据显示&#xff0c;今年Q1笔记本在线上市场&#xff08;京东天猫淘宝&#xff09;综合销量约250万件&#x…

第三节课,后端登录【1】.1--本人

一、后端登录逻辑&#xff0c;检测账户密码是否合法及密码输入是否正确 视频链接&#xff1a; 网址&#xff1a; 第三节&#xff1a;【视频】后端登录逻辑&#xff0c;检测账户密码是否合法及密码输入是否正确视频链接&#xff1a;-CSDN博客 从5.1开始 这是一个Java方法&am…

win c++使用lua环境配置 5.3.5版本

编译lua 下载lua源码&#xff0c;github仓库 使用vs编译源码&#xff0c;新建一个静态库项目(只会生成lib文件)&#xff0c;想要dll的话就新建dll项目&#xff08;有一个lib文件和dll文件&#xff09; 把lua源码下面的文件夹都是&#xff0c;复制到vs项目中 lib目录是我手动…

【前端缓存】localStorage是同步还是异步的?为什么?

写在开头 点赞 收藏 学会 首先明确一点&#xff0c;localStorage是同步的 一、首先为什么会有这样的问题 localStorage 是 Web Storage API 的一部分&#xff0c;它提供了一种存储键值对的机制。localStorage 的数据是持久存储在用户的硬盘上的&#xff0c;而不是内存。这意…

可视化智慧工厂

在科技迅猛发展的今天&#xff0c;制造业正迎来一场深刻的变革——智慧工厂的崛起。可视化智慧工厂作为其中的重要一环&#xff0c;以其直观、高效、智能的特点&#xff0c;正成为制造业转型升级的关键所在。 一、什么是可视化智慧工厂? 传统的制造业生产方式往往依赖于人工…

Unity | 集成 Protobuf(proto 转 cs 插件及序列化与反序列化)

1. 添加 dll 1. 下载 protobuf 源码 根据需要下载 protobuf 指定版本的源码&#xff0c;这里以 v3.21.12&#xff08;protobuf-csharp-3.21.12.zip&#xff09;为例&#xff1a; 下载地址&#xff1a;「https://github.com/protocolbuffers/protobuf/releases」 2. 下载 Vis…

Springboot 中RedisTemplate使用scan来获取所有的key底层做了哪些事情

直接上代码&#xff0c;围绕着代码来讨论 redisTemplate.execute((RedisCallback<Object>) (connection) -> {Cursor<byte[]> scan connection.scan(ScanOptions.scanOptions().count(2).match("*").build());scan.forEachRemaining((bytes) -> {…