Mongodb聚合操作中的$type

在mongodb查询语句中,用户可以通过指定$type值,查询出的符合字段类型的文档数据。在mongodb聚合操作中,也存在$type操作符。本文就聚合操作中的$type进行介绍。

定义

返回一个表示传入参数BSON类型的字符串。在聚合操作中,按照下面的语法来返回类型信息

{$type: <expression>}

其中,expression可以是字段名称,运算等任何合法的表达式。

行为

与查询过滤器中的$type用法不同。聚合操作中的$type用来返回表达式中的结果类型。如当传入一个数组作为参数是,返回数组类型。

当指定字段名称作为参数时,当文档中不存在该字段时,$type返回字符串"missing"。

下面表格描述了传入不同参数时获取到的结果。

表达式

结果

{$type: "a"}

"string"

{$type: /a/}

"regex"

{$type: 1}

"double"

{$type: NumberLong(627)}

"long"

{$type: {x: 1}}

"object"

{$type: [ [1, 2, 3] ]}

"array"

其中,为了避免数组[1, 2, 3]被解析成参数列表,这里将数组转换成了字面意义。

应用

在集合coll中有下面6个文档。

db.coll.insertMany([{_id: 0, a: 8},{_id: 1, a: [ 41.63, 88.19]},{_id: 2, a: {a: "apple", b: "banana", c: "carrot"}},{_id: 3, a: "caribou"},{_id: 4, a: NumberLong(71)},{_id: 5},])

使用聚合查询,查询字段a的类型

db.coll.aggregate([{$project: {a: {$type: "$a"}}
}])/* 1 */
{"_id" : 0,"a" : "int"
},/* 2 */
{"_id" : 1,"a" : "array"
},/* 3 */
{"_id" : 2,"a" : "object"
},/* 4 */
{"_id" : 3,"a" : "string"
},/* 5 */
{"_id" : 4,"a" : "long"
},/* 6 */
{"_id" : 5,"a" : "missing"
}

再来试试上面举例中返回数组的类型。直接传入数组时, mongodb返回了一个错误。 mongodb把直接传入的数组解析成了3个参数。而$type只能接受一个参数

//直接传入一个数组
db.coll.aggregate([{$project: {a: {$type: [1,2,3]}}
}])
{"message" : "Invalid $project :: caused by :: Expression $type takes exactly 1 arguments. 3 were passed in.","ok" : 0,"code" : 16020,"codeName" : "Location16020"
}

因此我们需要将数组的字面意义作为表达式传递给$type作为参数。

db.coll.aggregate([{$project: {a: {$type: {$literal: [1,2,3]}} //使用$literal传递数组的字面意义,不要被解析}
}])

或者把数组整体作为一个参数,传递给$type

db.coll.aggregate([{$project: {a: {$type: [[1,2,3]]}}
}])

这里, $type后面是一个数组,数组中只有一个元素是[1,2,3]的数组。当mongodb解析时,得到这个数组作为参数。

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

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

相关文章

leetcode贪心(最大子序列和、分发饼干、摆动序列)

455.分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

iPortal内置Elasticsearch启动失败的几种情况——Linux

作者&#xff1a;yx 文章目录 前言一、端口占用二、ES启动过慢三、磁盘占用过高&#xff0c;导致ES变为只读模式 前言 在Linux环境启动iPortal后有时会出现搜索异常的情况&#xff0c;如下截图&#xff0c;这是因为Elasticsearch&#xff08;以下简称“ES”&#xff09;没启动…

快速理解ASCII、GBK、Unicode、UTF-8、ANSI

文章大部分内容来源于非官方说明&#xff0c;且无法用逻辑推理出结果&#xff0c;准确性仅供参考。 ASCII 计算机是老外发明的&#xff0c;想让计算机实现更多的功能&#xff0c;必然少不了把常用的字母和符号存进去&#xff0c;甚至包含一些特殊符号&#xff0c;于是ASCII码…

剑指 Offer(第2版)面试题 60:n 个骰子的点数

剑指 Offer&#xff08;第2版&#xff09;面试题 60&#xff1a;n 个骰子的点数 剑指 Offer&#xff08;第2版&#xff09;面试题 60&#xff1a;n 个骰子的点数解法 1&#xff1a;递归解法 2&#xff1a;动态规划 剑指 Offer&#xff08;第2版&#xff09;面试题 60&#xff1…

共享单车之数据可视化

文章目录 第1关&#xff1a;绘制地图第2关&#xff1a;绘制流量最高的五条线路的路程图 第1关&#xff1a;绘制地图 任务描述 本关任务&#xff1a;使用JSP在百度地图上绘制一条共享单车起始路程。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 如何创建地…

进阶学习——Linux系统服务器硬件认识与RAID磁盘

目录 一、服务器知识补充 1.硬件 2.服务器常见故障 二、认识RAID 1.什么是RAID 2.RAID的优点 3.RAID的实现方式 三、RAID磁盘陈列 1.RAID 0 磁盘陈列介绍——RAID 0 2.RAID 1 磁盘陈列介绍——RAID 1 3.RAID 5 磁盘陈列介绍——RAID 5 4.RAID 6 磁盘陈列介绍——RA…

vr体验馆用什么软件计时计费,如遇到停电软件程序如何恢复时间

vr体验馆用什么软件计时计费&#xff0c;如遇到停电软件程序如何恢复时间 一、软件程序问答 如下图&#xff0c;软件以 佳易王vr体验馆计时计费软件V17.9为例说明 1、软件如何计时间&#xff1f; 点击相应编号的开始计时按钮即可 2、遇到停电再打开软件时间可以恢复吗&…

【开源】基于Vue+SpringBoot的公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

Redis经典五大类型源码及底层实现(一)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

LeetCode——2660. 保龄球游戏的获胜者

通过万岁&#xff01;&#xff01;&#xff01; 题目比较简单&#xff0c;就是给你两个数组&#xff0c;大小为n&#xff0c;分别表示n次投掷保龄球的得分。然后让你按照某种规则计算出最后的总得分&#xff0c;从而判断胜负。计算的规则就是如果出现了10分&#xff0c;那么接…

Linux CPU 数据 Metrics 指标解读

过去从未仔细了解过使用 top 和 htop 等命令时显式的CPU信息&#xff0c;本文我们详解解读和标注一下各个数据项的含义&#xff0c;同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识&#xff0c;很多查看CPU的命令行工具都是 cat /proc/stat 里的数据&#xff0c;所…

Spring-6-事务管理

事务是构建可靠企业级应用程序的最关键部分之一。 最常见的事务类型是数据库操作。 在典型的数据库更新操作中&#xff0c;首先数据库事务开始&#xff0c;然后数据被更新&#xff0c;最后提交或回滚事务(根据数据库操作的结果而定)。但是&#xff0c;在很多情况下&#xff0…

Dockerfile文件介绍

0 Preface/Foreword 0.1 Docker docker用来自制镜像。 1 Introduction 1.1 Dockerfile Dockerfile是用于定义Docker镜像的构建过程&#xff0c;它包含一系列的指令用于安装 软件包、配置环境等操作。 Dockerfile文件的格式如下&#xff1a; FROM base_image RUN apt-get up…

java中的缓冲类HeapByteBuffer和DirectByteBuffer的区别

使用之前写的文章里的例子 https://blog.csdn.net/zlpzlpzyd/article/details/135292683 HeapByteBuffer import java.io.File; import java.io.FileInputStream; import java.io.Serializable; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public clas…

【hcie-cloud】【12】华为云Stack故障处理【故障处理通用处理原则、常见华为云Stack故障处理(计算域故障场景)】【上】

文章目录 前言故障处理通用处理原则故障处理流程故障信息收集及故障范围、类型识别ManageOne运维面收集告警信息AutoOps工具故障场景信息收集AutoOps工具自动化采集HCS信息 (1)AutoOps工具自动化采集HCS信息 (2)故障初期定位方向故障恢复例行维护讨论: 哪一环比较重要&#xff…

SQL面试题挑战08:补全缺失日的月销售累计

目录 问题&#xff1a;SQL解决&#xff1a;补充&#xff1a;repeat函数和space函数 问题&#xff1a; 现有一张员工的销售记录表&#xff0c;表样式如下。现在需要统计每个员工在2023年10月份&#xff0c;截止到每天的月累计销售额。注意&#xff1a;存在有的员工在某几天是没…

关于表格太大了jupyter无法单次处理的问题

记录下自己的心路历程…耗时耗精力 我用的数据库单个表格就很大&#xff0c;一个表格有30多G&#xff0c;jupyter无法处理这么大的表格&#xff0c;会直接把电脑的进程全部结束掉&#xff0c;结束掉要是能运行成功倒也行啊&#xff0c;然鹅…给我报错说处理不了&#xff0c;罢工…

【SpringCloud】从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry&#xff08;&#xff09; 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警&#xff0c;当时…

vue路由传参

声明式导航传参 1 动态路由传参 路由规则path -> /article/:aid 导航链接 <router-link to"/article/1">查看第一篇文章</router-link> 组件获取参数: this.$route.params.aid 2 查询参数传参数 /路径?参数1值&参数2值 路由规则path ->…

next.js 开发网站的hello world

本文介绍建立一个简单的next.js 工程&#xff0c;以及简单修改。然后也简单说了2种路由方式的选择。 开始next.js工程前需要node.js &#xff0c; 还需要编辑器&#xff0c;我这里选择的是visual code。如果没有安装node.js 请参考下&#xff1a; visual code 下的node.js的he…