MongoDB 聚合管道中使用数组表达式运算符断言数组($isArray)

news2024/10/7 12:21:01

数组表达式运算符主要用于文档中数组的操作,接上一篇:

MongoDB 聚合管道中使用数组表达式运算符($concatArrays合并数组)https://blog.csdn.net/m1729339749/article/details/130162048本篇我们主要介绍数组表达式运算符中用于断言数组的操作,断言数组的操作其目的是用于判断字段是否是数组,可以用于解决合并数组时我们可能会出现的问题,下面我们进行详细介绍:

一、语法

{ $isArray: <expression> }

        判断是否是数组

二、准备工作

初始化成员数据

db.persons.insertMany([
    { "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "pineapple" ], "toys": [ "橡皮鸭" ] },
    { "_id" : "1002", "name" : "李四", "fruits" : [ "banana", "apple" ] },
    { "_id" : "1003", "name" : "王五", "fruits" : null, "toys": [ "小卡车" ] },
    { "_id" : "1004", "name" : "赵六", "fruits" : [ ], "toys": [ "毛绒鹅" ] },
    { "_id" : "1005", "name" : "田七", "toys": [ "积木" ] },
])

三、示例

例子1:判断fruits、toys是否是数组

db.persons.aggregate([
    {
        $project: {
            "name": 1,
            "fruitsIsArray": { $isArray: "$fruits" },
            "toysIsArray": { $isArray: "$toys" }
        }
    }
])

聚合查询的结果如下:

{ "_id" : "1001", "name" : "张三", "fruitsIsArray" : true, "toysIsArray" : true }
{ "_id" : "1002", "name" : "李四", "fruitsIsArray" : true, "toysIsArray" : false }
{ "_id" : "1003", "name" : "王五", "fruitsIsArray" : false, "toysIsArray" : true }
{ "_id" : "1004", "name" : "赵六", "fruitsIsArray" : true, "toysIsArray" : true }
{ "_id" : "1005", "name" : "田七", "fruitsIsArray" : false, "toysIsArray" : true }

从上面的结果可以看出,当字段不存在或者为null时,判断的结果为false

例子2:合并水果和玩具到喜欢的字段中

db.persons.aggregate([
    { 
        $addFields: {
            "favorite": {
                $cond: {
                    if: { $isArray: "$fruits" },
                    then: "$fruits",
                    else: []
                }
            }
        }
    },
    { 
        $addFields: {
            "favorite": {
                $cond: {
                    if: { $isArray: "$toys" },
                    then: { $concatArrays: [ "$favorite", "$toys" ] },
                    else: "$favorite"
                }
            }
        }
    }
])

聚合查询的结果如下:

{ "_id" : "1001", "name" : "张三", "fruits" : [ "apple", "pineapple" ], "toys" : [ "橡皮鸭" ], "favorite" : [ "apple", "pineapple", "橡皮鸭" ] }
{ "_id" : "1002", "name" : "李四", "fruits" : [ "banana", "apple" ], "favorite" : [ "banana", "apple" ] }
{ "_id" : "1003", "name" : "王五", "fruits" : null, "toys" : [ "小卡车" ], "favorite" : [ "小卡车" ] }
{ "_id" : "1004", "name" : "赵六", "fruits" : [ ], "toys" : [ "毛绒鹅" ], "favorite" : [ "毛绒鹅" ] }
{ "_id" : "1005", "name" : "田七", "toys" : [ "积木" ], "favorite" : [ "积木" ] }

通过上面的例子,我们成功解决了多个数组合并可能会出现的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在windows上安装部署cicd

安装步骤 下载gitlab-runner&#xff0c;官网地址如下&#xff1a; https://docs.gitlab.com/runner/install/windows.html在任意位置创建文件夹&#xff0c;并把安装程序放入文件夹中 安装gitlab-runner 注意需要使用管理员权限&#xff0c;打开powershell才能运行 cd C:\Gi…

多智能体深度强化学习在移动边缘计算的联合多通道访问和任务卸载中的应用

多智能体深度强化学习在移动边缘计算的联合多通道访问和任务卸载中的应用主要贡献与相关工作比较的贡献三、系统模型&#xff08;only 2 pages&#xff09;3.1 网络模型3.2 通信模型3.3 计算模型3.3.1 本地计算3.3.2 卸载计算四、预备知识&#xff08;only 1 page&#xff09;五…

Autosar COM Stack系列介绍01_一文看懂各层PDU

本文框架1. 概述1.1 缩写2. OSI模型在Autosar中应用3. 各层PDU介绍3.1 L-PDU3.2 N-PDU3.2.1 N_AI3.2.2 N_PCI3.3 I-PDU1. 概述 在学习Autosar通信栈时中会遇到关于PDU的各种缩写&#xff0c;例如&#xff0c;L-PDU&#xff0c;N-PDU&#xff0c;I-PDU还有SDU等&#xff0c;它们…

Kafka3.0.0版本——生产者自定义分区器

目录一、生产者自定义分区器代码示例1.1、自定义分区器类1.2、生产者发送消息代码&#xff08;生产者的配置中添加分区器参数&#xff09;1.3、测试一、生产者自定义分区器代码示例 1.1、自定义分区器类 代码 package com.xz.kafka.producer;import org.apache.kafka.clients.…

Web API学习笔记1(DOM学习)

一、API 和 web API 1API API —— 应用程序编程接口&#xff0c;是给程序员提供的一种工具&#xff0c;以便能更轻松的实现想要完成的功能。可以比作为充电接口 2.Web API 是浏览器提供的一套操作浏览器功能和页面元素的API&#xff08;BOM和DOM&#xff09;&#xff0c;主…

HarmonyOS/OpenHarmony应用开发-ArkTS画布组件CanvasRenderingContext2D对象(十一)

measureText measureText(text: string): TextMetrics 该方法返回一个文本测算的对象&#xff0c;通过该对象可以获取指定文本的宽度值。 示例&#xff1a; // xxx.etsEntryComponentstruct MeasureText { private settings: RenderingContextSettings new RenderingConte…

机器学习 异常值检测与处理

文章目录一、异常值检测1.1 简单统计1.2 3σ原则检测1.3 箱线图检测1.4 DBScan密度聚类二、异常值处理异常值是指不属于某一特定群体的数据点。它是一个与其他数值大不相同的异常观测值&#xff0c;与良好构成的数据组相背离。在机器学习建模准备数据集时&#xff0c;检测出所有…

Day940.开发分支 -系统重构实战

开发分支 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于开发分支的内容。 组件化&#xff0c;软件变得更加高内聚、低耦合&#xff0c;开发及维护的效率也更高了&#xff0c;但是组件化的架构又会引入新的复杂度。 举个例子&#xff0c;在重构前我们基于一个模块…

解决Failed to load ApplicationContext问题的思路

中文翻译&#xff1a; 加载ApplicationContext失败 第一步&#xff1a;首先检查测试类的注解 以及 依赖 SpringBootTest <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope…

【数据库复习】第三章关系数据库标准语言SQL 集合查询 2

用EXISTS/NOT EXISTS实现全称量词 SQL语言中没有全称量词" &#xff08;For all&#xff09; 可以把带有全称量词的谓词转换为等价的带有存在量词的谓词&#xff1a; 查询学生S没有选修的课程 查询选修了全部课程的学生姓名。 等价于&#xff1a;查询这样的学生&#xf…

基于灵动微SPIN系列开发的水泵方案介绍 以 MM32SPIN040C/MM32SPIN560C为主控

水泵是输送液体或使液体增压的机械。它将原动机的机械能或其他外部能量传送给液体&#xff0c;使液体能量增加&#xff0c;主要用来输送液体包括水、油、酸碱液、乳化液、悬乳液和液态金属等。 水泵以 MM32SPIN040C/MM32SPIN560C为主控。 水泵方案 MCU: MM32SPIN系列 1.输入…

redis主从复制详解

文章目录主从复制概述主从复制的作用主要包括&#xff1a;数据冗余故障恢复负载均衡高可用基石主从库之间采用的是读写分离的方式读操作写操作主从复制原理全量复制确立主从关系全量复制的三个阶段第一阶段是主从库间建立连接、协商同步的过程&#xff0c;主要是为全量复制做准…

业务逻辑复杂如何解决性能问题

0 前言 上节针对生成订单信息这个接口做了三个阶段的分析定位和优化动作&#xff0c;让TPS变得正常。不过&#xff0c;系统资源并没有完全用起来&#xff0c;这个接口显然还有优化空间。性能优化的过程中&#xff0c;要把资源都用起来。 在性能环境中做优化&#xff0c;把资源…

自动化测试框架之selenium

目录1 自动化测试1.1 单元测试1.2 接口测试1.3 UI测试1.3.1 UI自动化测试的优点&#xff1a;1.3.2 UI自动化测试的适用对象1.4 自动化测试流程2 selenium3 selenium IDE 录制脚本1 自动化测试 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&…

50 openEuler搭建PostgreSQL数据库服务器-配置环境

文章目录50 openEuler搭建PostgreSQL数据库服务器-配置环境50.1 关闭防火墙并取消开机自启动50.2 修改SELINUX为disabled50.3 创建组和用户50.4 创建数据盘50.4.1 方法一&#xff1a;在root权限下使用fdisk进行磁盘管理50.4.2 方法二&#xff1a;在root权限下使用LVM进行磁盘管…

图解HTTP阅读笔记:第5章 与HTTP协作的Web服务器

《图解HTTP》第五章读书笔记 图解HTTP第5章 与HTTP协作的Web服务器5.1 用单台虚拟主机实现多个域名5.2 通信数据转发程序&#xff1a;代理、网关、隧道5.2.1 代理5.2.2 网关5.2.3 隧道5.3 保存资源的缓存5.3.1 缓存的有限期限5.3.2 客户端的缓存第5章 与HTTP协作的Web服务器 5…

学习系统编程No.18【进程间通信之管道实战】

引言&#xff1a; 北京时间&#xff1a;2023/4/11/21:17&#xff0c;今天的文章更新啦&#xff01;但是还是没有上热榜&#xff0c;所以我们需要继续更文啦&#xff01;我相信下一篇博客肯定是可以上热榜的&#xff0c;加油&#xff01;并且今天晚上因为有一节体育课&#xff…

Linux下让进程不再被拉起

Linux下为了防止应用挂掉&#xff0c;我们会设置服务进程来拉起这些应用。但某些流氓软件也会利用该机制使得它们被杀掉后能再被拉起来。本文讲述让这些进程不再被拉起的方法。 比如&#xff0c;有名称为recordmain.bin的进程&#xff0c;使用kill -9 杀掉它后&#xff0c;过几…

NVIDIA jetson tensorrt加速yolov5摄像头检测

link 在使用摄像头直接检测目标时&#xff0c;检测的实时画面还是有点慢&#xff0c;下面是tensorrt加速过程记录。 一、设备 1、设备jetson agx xavier 2、jetpack4.6.1 3、tensorrt 8.2.1.8 4、conda虚拟环境 python3.6 二、虚拟环境搭建及依赖 1、参考此博客安装torch Nvidi…

做自动化测试时所谓的“难点”

这篇关于自动化测试的文章&#xff0c;可能和你看到的大多数自动化的文章有所不同。我不是一位专职的自动化测试工程师&#xff0c;没有开发过自动化的工具或者框架&#xff0c;用的自动化的工具也不多&#xff0c;也没有做过开发&#xff0c;所以我讲不出那些现在很多人很看重…