MongoDB聚合运算符:$setDifference

embedded/2024/12/22 9:18:24/

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/embedded/16284.html

相关文章

Linux-软件安装--jdk安装

jdk安装 前言1、软件安装方式二进制发布包安装rpm安装yum安装源码编译安装 2、安装jdk2.1、使用finalShell自带的上传工具将jdk的二进制发布包上传到Linux2.2、解压安装包2.3、配置环境变量![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/61ba9750e2e34638a39575c5…

vue2实现列表数据字幕式循环滚动

一、功能点&#xff1a; 实现列表“字幕式”滚动效果&#xff1b; 字幕循环滚动&#xff0c;滚完数据之后会继续从头开始滚动 实现鼠标移入&#xff0c;字幕停止滚动&#xff1b;鼠标移出&#xff0c;字幕继续滚动&#xff1b; 实现滚轮在指定区域内滚动&#xff0c;能够控制控…

在若依ruoyi-vue中集成watermark实现页面添加水印

本文相关视频&#xff1a;https://www.bilibili.com/video/BV1Fi4y1q74p?p47&vd_source2894aa0e46c09ba98269f266128b6c6e 在若依Ruoyi-Vue中集成Watermark实现页面添加水印 摘要 本文将介绍如何在若依Ruoyi-Vue中集成Watermark实现页面添加水印&#xff0c;以保护页面…

datax与多种数据库间数据类型映射

文章目录 前言一、背景二、映射HiveHBaseMongoDBOraclePostgreSQLSqlServerMysqlODPSOSS 总结 前言 datax内置的enumType数据类型与不同数据库间都有些差异&#xff0c;本文整理出相应的映射关系&#xff0c;在配置自定义json时可以参考做一些类型转换 一、背景 DataX 是阿里…

golang 流程控制

流程控制 一 if条件语句 1 if单分支 if条件表达式{ //条件表达式不建议写括号 if后一定要有空格与条件表达式分开 逻辑代码 /大括号一定要写不能省略 } 例如 var age int fmt.Println("请输入学生1年龄:") fmt.Scanln(&age) fmt.Println(&quo…

前端科举八股文-CSS篇

前端科举面经-CSS篇 Css选择器的优先级css盒模型行内元素和块级元素的区别?link标签和import标签的区别讲一下弹性盒子布局的常见属性flex是哪三个属性的简写什么是BFC&#xff1f; 有什么作用垂直居中的方法?visibilityhidden, opacity0&#xff0c;display:none的区别清除浮…

按照模板导出复杂样式的excel

导出excel通常使用的是apache poi,但是poi的api相当复杂&#xff0c;所以当导出的excel样式比较复杂时&#xff0c;写起来就比较头疼了&#xff0c;这里推荐使用easypoi, 可以很方便的根据模板来导出复杂excel 文档地址: 1.1 介绍 - Powered by MinDoc 我们要实现如图所示效果…

模块化 手写实现webpack

模块化 common.js 的导入导出方法&#xff1a; require \ export 和 module.exports export 和 module.export nodejs 内存1.4G -> 2.8G cjs ESModule 主要区别&#xff1a; require属于动态类型&#xff1a;加载执行 同步 esmodul是静态类型&#xff1a;引入时并不会真的去…