MongoDB CRUD操作:投影Project详解
MongoDB CRUD操作:投影Project详解
文章目录
- MongoDB CRUD操作:投影Project详解
- 返回文档的全部字段
- 返回指定的字段和_id字段
- 不输出_id字段
- 指定排除的字段
- 返回内嵌文档中的指定字段
- 禁止内嵌文档中的特定字段
- 数组中内嵌文档的投影
- 聚合表达式的投影字段
默认情况下,MongoDB查询返回文档中的所有字段,通过project可以限制MongoDB发送到应用程序的文档的字段。
下面的示例使用mongosh的db.collection.find()方法对内嵌/嵌套文档进行查询,如果使用其他编程语言或驱动,写法会有不同。
首先,使用下面的语句创建inventory集合:
db.inventory.insertMany( [{ item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },{ item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },{ item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },{ item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },{ item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
返回文档的全部字段
如果不指定文档投影,则db.collection.find()方法将返回匹配文档中的所有字段。下面的示例返回inventory集合中status为"A"的文档的全部字段:
db.inventory.find( { status: "A" } )
这个操作等价于SQL语句:
SELECT * from inventory WHERE status = "A"
返回指定的字段和_id字段
在投影文档中将<field>设置为1,可以显式包含多个字段,下面的操作返回item、status以及默认的_id字段。
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
该操作等价于SQL语句:
SELECT _id, item, status from inventory WHERE status = "A"
不输出_id字段
可以通过在投影中将_id字段设置为0,从而在结果中删除——id字段,如下例所示:
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
该操作等价于SQL语句:
SELECT item, status from inventory WHERE status = "A"
除_id字段外,不能在投影文档中同时指定输出和排除的字段。
指定排除的字段
可以使用投影来排除特定字段,而不是列出要在匹配文档中返回的字段,下面的示例返回匹配文档中除status和 instock字段之外的所有字段,也就是排除这两个字段:
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
返回内嵌文档中的指定字段
可以返回内嵌文档的特定字段,使用点号(.)引用内嵌字段并在投影文档中设置为1。
下面的示例返回:
_id字段(默认返回),item字段,status字段,size文档中的uom字段。uom字段仍然内嵌在size文档中。
db.inventory.find({ status: "A" },{ item: 1, status: 1, "size.uom": 1 }
)
还可以使用嵌套形式指定内嵌字段。例如,
{ item: 1, status: 1, size: { uom: 1 } }
禁止内嵌文档中的特定字段
可以使用点号.引用投影文档中的内嵌字段并设置为0来隐藏内嵌文档的特定字段。
下面的示例指定一个投影来排除size文档内的uom字段。所有其他字段都在匹配文档中返回:
db.inventory.find({ status: "A" },{ "size.uom": 0 }
)
还可以使用嵌套形式指定内嵌字段。例如:
{ size: { uom: 0 } }
数组中内嵌文档的投影
使用点号.表示投影数组中内嵌文档的特定字段。
以下示例指定要返回的投影:
- _id 字段(默认返回),
item字段,status字段,instock数组中内嵌文档的qty数量字段。
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
$elemMatch、$slice和$是投影特定元素以包含在返回的数组中的唯一方法。例如,不能使用数组索引来投影特定的数组元素;例如{ "instock.0": 1 }投影不会用第一个元素投影数组。
聚合表达式的投影字段
可以在查询投影中指定聚合表达式。聚合表达式允许投影新字段并修改现有字段的值。
例如,下面的操作使用聚合表达式覆盖status字段的值,并投影新字段area和reportNumber。
db.inventory.find({ },{_id: 0,item: 1,status: {$switch: {branches: [{case: { $eq: [ "$status", "A" ] },then: "Available"},{case: { $eq: [ "$status", "D" ] },then: "Discontinued"},],default: "No status found"}},area: {$concat: [{ $toString: { $multiply: [ "$size.h", "$size.w" ] } }," ","$size.uom"]},reportNumber: { $literal: 1 }}
)
输出结果:
[{item: 'journal',status: 'Available',area: '294 cm',reportNumber: 1},{item: 'planner',status: 'Discontinued',area: '685.5 cm',reportNumber: 1},{item: 'notebook',status: 'Available',area: '93.5 in',reportNumber: 1},{item: 'paper',status: 'Discontinued',area: '93.5 in',reportNumber: 1},{item: 'postcard',status: 'Available',area: '152.5 cm',reportNumber: 1}
]
相关文章:
MongoDB CRUD操作:投影Project详解
MongoDB CRUD操作:投影Project详解 文章目录 MongoDB CRUD操作:投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段 默认…...
redis 集群 底层原理以及实操
前言 上篇我们讲解了哨兵集群是怎么回事 也说了对应的leader选举raft算法 也说了对应的slave节点是怎么被leader提拔的 主要是比较优先级 比较同步偏移量 比较runid等等 今天我们再说说,其实哨兵也有很多缺点 虽然在master挂了之后能很快帮我们选举出新的master 但是对于单个ma…...
MVC架构中的servlet层重定向404小坑
servlet层中的UserLoginServlet.java package com.mhys.servlet; /*** ClassName: ${NAME}* Description:** Author 数开_11* Create 2024-05-29 20:32* Version 1.0*/import com.mhys.pojo.User; import com.mhys.service.UserService; import com.mhys.service.impl.UserSer…...
Java-RabbitMQ
RabbitMQ使用场景 1、跨系统异步通信 2、多应用之间解耦 3、应用内流程同步变异步 4、整体架构即采用消息驱动 5、应用内部解耦 RabbitMQ内部角色 角色简介生产者消息创建者消费者消息接收者代理RabbitMQ本身,用于存储转发消息,快递功能 RabbitMQ有哪…...
ABAP 在增强中COMMIT
前言 呃,又是很磨人的需求,正常情况下是不允许在增强中COMMIT的,会影响源程序本身的逻辑,但是这个需求就得这么干… 就是在交货单增强里面要再调用一次交货单BAPI,通过SO的交货单自动创建STO的交货单,如果…...
【UML用户指南】-02-UML的14种图
1、结构图 1、类图(class diagram) 展现了一组类、接口、协作和它们之间的关系。 在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。 包含主动类的类图给出系统的静态进程视图。构件图是类图的变体。 2、对象图&a…...
Linux驱动开发笔记(二) 基于字符设备驱动的I/O操作
文章目录 前言一、设备驱动的作用与本质1. 驱动的作用2. 有无操作系统的区别 二、内存管理单元MMU三、相关函数1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知识1. GPIO的寄存器进行读写操作流程2. 引脚复用2. 定义GPIO寄存器物理地址 五、…...
三品软件:打造高效安全的图文档管理体系
在数字化转型的浪潮中,工程设计单位和企业设计部门面临着电子图文档管理的巨大挑战。随着电子图纸和文档数量的激增,如何有效组织、管理和共享这些资源,成为提升工作效率和保障信息安全的关键。本文将探讨当前图文档管理面临的问题࿰…...
N1 one-hot编码
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 onehot编码在机器学习比较常见,例如推荐系统中类别变量的处理等。 onehot 编码简介 One-hot编码(one-hot encoding&…...
数据库基础+增删查改初阶
数据库基础增删查改初阶 一。数据库操作 1.概念: 一个mysql服务器上有很多的表,把有关系的表放在一起就构成了一个数据集合,此时称为“数据库”,一个mysql1服务器上可以有多个这样的数据库 2.创建数据库: create …...
大模型日报2024-05-29
大模型日报 2024-05-29 大模型资讯 大型语言模型在金融预测中将超越人类分析师 摘要: 新研究表明,大型语言模型如ChatGPT在金融预测方面表现优于人类专家,为交易策略提供了宝贵的见解。这意味着未来这些模型将在金融领域发挥更重要的作用,提升…...
如何摆脱打工人任人宰割的命运
那就是为自己打工。 要有自己的思想,自己的目标,有自己的方向,坚决的非常自信的去执行它。 这样才是活出属于自己的人生,活出自己的精彩。 当然,这是在你已经比周围人优秀的情况下,至少是你觉得你比他们…...
“图片在哪”、“我是temunx”、“变成思维导图用xmindparser”gpt给出文本变字典
需求 我的意思是什么 分类清单“图片在哪 我是temunx变成思维导图 用xmindparser用 shell 画思维导图 x mind,可以 /storage/emulated/0/字体/黑体.ttf 保存/storage/emulated/0/print/图片/input图纸/完整代码 给个文本内容”任务清单 调整语言顺序文不对题的…...
【LeetCode】【5】最长回文子串
文章目录 [toc]题目描述样例输入输出与解释样例1样例2 提示Python实现动态规划 个人主页:丷从心 系列专栏:LeetCode 刷题指南:LeetCode刷题指南 题目描述 给一个字符串s,找到s中最长的回文子串 样例输入输出与解释 样例1 输入…...
主播们直播时的美颜是如何实现的?集成第三方美颜SDK方案详解
很多人问小编,主播们直播时的美颜效果是如何实现的呢?接下来,我将为您详细介绍美颜功能的实现原理。 一、美颜功能的基本原理 通过对图像进行实时处理,达到美化人脸的效果。其主要技术包括: 1.人脸检测与关键点定位 …...
Leetcode - 131双周赛
一,3158. 求出出现两次数字的 XOR 值 本题是一道纯模拟题,直接暴力。 代码如下: class Solution {public int duplicateNumbersXOR(int[] nums) {int ans 0;long t 0;for(int x : nums){if(((t>>x)&1) 1){ans ^ x;}else{t | (…...
【CSharp】判断目录以及文件是否存在
【CSharp】判断目录以及文件是否存在 1.背景2.判断目录3.判断文件1.背景 我们在进行磁盘IO的时候进行需要判断目录、文件是否存在,根据判断结果再做进一步的操作。 其中判断目录是否存在,涉及Directory.Exists(String) 方法; 命名空间:System.IO 方法功能:确定给定路径是…...
kali基本扫描工具(自带)
免责声明:本文仅做技术交流与学习...请勿非法破坏... 详细用法: 命令 -h/百度/翻译 fping 用法 hostlist 文件里面为ip fping -a -q -f hostlist -a 只看存活的 fping -g 202.100.1.1 202.100.1.255 -a -q > Ahost 输出到Ahost文件上 nping nping -c 1 201.100.2.155-244 …...
与MySQL的初相遇
🌎初识MySQL 注:本文SQL语句只为了验证猜想,不会也不要紧。 文章目录: MySql开端 认识数据库 什么是数据库 主流数据库 MySQL的本质 MySQL基础使用 连接mysql服务器 …...
详解Spring IoCDI(一)
目录 1.什么是IoC 2.IoC应用场景(案例分析) 2.1传统程序开发 2.2问题分析 2.3解决方案 2.4IoC 优势 3. DI概念 4.IoC详解 4.1Bean的存储 4.2Controller(控制器存储) 4.3获取Bean 4.4Bean相关注解 1.什么是IoC Spring…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
ABB馈线保护 REJ601 BD446NN1XG
配电网基本量程数字继电器 REJ601是一种专用馈线保护继电器,用于保护一次和二次配电网络中的公用事业和工业电力系统。该继电器在一个单元中提供了保护和监控功能的优化组合,具有同类产品中最佳的性能和可用性。 REJ601是一种专用馈线保护继电器…...
