MongoDB聚合运算符:$setDifference

devtools/2024/9/25 8:31:11/

MongoDB聚合运算符:$setDifference

文章目录

  • MongoDB聚合运算符:$setDifference
    • 语法
    • 使用
    • 举例

$setDifference聚合运算符比较两个数组,返回之前第一个数组中存在的元素,相当于返回第二个数组对于第一个数组的补集。

语法

{ $setDifference: [ <expression1>, <expression2> ] }

参数可以是任何能够解析为数组的表达式。

使用

  • $setDifference 对数组执行集合操作,将数组视为集合。如果数组包含重复元素,$setDifference 会忽略重复元素。 $setDifference 忽略元素的顺序。
  • $setDifference 会过滤掉结果中的重复元素,输出仅包含唯一元素的数组,输出数组中元素的顺序未指定。
  • 如果集合包含嵌套数组元素,则 $setDifference 不会下降到嵌套数组,而只处理顶层数组元素。
举例结果
{ $setDifference: [ [ "a", "b", "a" ], [ "b", "a" ] ] }[ ]
{ $setDifference: [ [ "a", "b" ], [ [ "a", "b" ] ] ] }[ "a", "b" ]

举例

使用下面的脚本创建flowers集合:

db.flowers.insertMany( [{ "_id" : 1, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ] },{ "_id" : 2, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ] },{ "_id" : 3, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ] },{ "_id" : 4, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ] },{ "_id" : 5, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ] },{ "_id" : 6, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ] },{ "_id" : 7, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ] },{ "_id" : 8, "flowerFieldA" : [ ], "flowerFieldB" : [ ] },{ "_id" : 9, "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ] }
] )

下面的聚合使用 $setDifference 运算符返回在flowerFieldB 数组中找到但在flowerFieldA 数组中未找到的元素的数组:

db.flowers.aggregate([{ $project: { flowerFieldA: 1, flowerFieldB: 1, inBOnly: { $setDifference: [ "$flowerFieldB", "$flowerFieldA" ] }, _id: 0 } }]
)

操作返回下面的结果:

{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ], "inBOnly" : [ "jasmine" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ], "inBOnly" : [ "jasmine" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ], "inBOnly" : [ [ "rose" ], [ "orchid" ] ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ], "inBOnly" : [ [ "rose", "orchid" ] ] }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ], "inBOnly" : [ "rose" ] }

http://www.ppmy.cn/devtools/14812.html

相关文章

linux的“>”和“>>”

在Linux中&#xff0c;>和>>都是用于文件重定向的操作符&#xff0c;它们用于将命令的输出发送到文件中。 > 用于创建一个新文件或覆盖现有文件的内容。当你执行一个如 command > file.txt 的命令时&#xff0c;如果 file.txt 文件存在&#xff0c;它的内容将被…

<网络> HTTP

目录 前言&#xff1a; 一、再谈协议 &#xff08;一&#xff09;认识URL &#xff08;二&#xff09;Encode 和 Decode 二、HTTP 协议 &#xff08;一&#xff09;协议格式 &#xff08;二&#xff09;见一见请求 &#xff08;三&#xff09;见一见响应 三、模拟实现响…

深入浅出SSH

诸神缄默不语-个人CSDN博文目录 SSH&#xff08;Secure Shell&#xff09;是一个用于计算机之间安全通信的协议。它广泛用于远程登录和其他网络服务&#xff0c;以确保数据在网络中传输的安全性和完整性。本文将介绍SSH的基础知识&#xff0c;以及如何在Windows 10系统中使用内…

flutter 设置全屏 和隐藏状态栏和导航栏

设置全面屏 使用 SafeArea 将页面套起来 top bottom 都设置为true SafeArea(top: false,bottom: false,child: Container(child: _body(),), ), 隐藏状态栏和导航栏 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);overlays 中可以填需要展示的 如…

概念Android AMS

Android的Activity Manager Service&#xff08;AMS&#xff09;是负责管理整个系统中Activity生命周期、任务栈、应用启动等核心功能的系统服务。它通过系统级别的进程间通信&#xff08;IPC&#xff09;机制与应用程序组件交互&#xff0c;确保应用程序的行为符合Android的多…

Zustand 和 React 上下文状态管理

Zustand 是客户端全局状态管理的一个很棒的库。它简单、快速&#xff0c;并且包大小小。然而&#xff0c;有一件事我不一定喜欢它&#xff1a;这些 Store 是全局性的。 但这不是全局状态管理的重点吗&#xff1f;要使该状态在您的应用程序中随处可用。不过当我回顾过去几年中使…

三、fpga对完成过滤和校验的有效包数据进行有效像素提取、MATLAB对数据源进行处理与下发(完整实现pc机→显示器通信链路)

前言:上篇文章实现了MATLAB模拟发送UDP以太网协议数据包到fpga,能实现双沿数据→单沿数据转换,并将转换后的数据进行包过滤和crc校验,本篇内容要实现真正的从pc机下发视频数据,经过千兆以太网传输存储到fpga 的ddr3中,然后通过hdmi读出到显示屏上。 文章目录 一、模块设…

机器学习(二)之监督学习

前言&#xff1a; 上一节大概讲解了几种学习方式&#xff0c;下面几张就具体来讲讲监督学习的几种算法。 以下示例中和都是权重的意思&#xff01;&#xff01;&#xff01; 注&#xff1a;本文如有错误之处&#xff0c;还请读者指出&#xff0c;欢迎评论区探讨&#xff01; 1…