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…...
CVPR 2026 手物交互数据生成新SOTA
Project Page: https://gasaiyu.github.io/PAM.github.io/01▪ 在只给定初始姿态、目标姿态和不含外观的物体几何信息的输入下,如何直接生成逼真的手物交互(HOI)视频?▪ 现有方法存在一系列问题:姿态合成方法只能预测 …...
终极指南:如何在PC上免费畅玩Switch游戏 - Ryujinx模拟器完整解决方案
终极指南:如何在PC上免费畅玩Switch游戏 - Ryujinx模拟器完整解决方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾经梦想在电脑上体验《塞尔达传说:…...
智能家居选遥控器?RF 2.4G vs 蓝牙 vs IR 保姆级对比指南
智能家居遥控技术终极对决:RF 2.4G vs 蓝牙 vs IR 深度解析 当你深夜躺在沙发上想调暗灯光,却发现必须起身对准空调才能操作——这种尴尬正是选错遥控技术的代价。智能家居的"最后一米"控制体验,往往取决于那只看不见的传输协议。本…...
libvirt 有哪些命令
除了 virsh 外,还有很多有意思的命令。virt-manager 用于打开 libvirt 交互的界面除了连接本地电脑,也可以访问远程电脑的 libvirtd 服务virt-clone 快速克隆一个虚拟机。在 virt-manager 界面上也集成了这个功能。如下图,就是这么简单快捷&a…...
智科毕业设计易上手选题100例
0 选题推荐 - 汇总篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应用…...
【雷达信号优化】第八章 阵列校准与误差补偿
目录 第八章 阵列校准与误差补偿 8.1 阵列误差模型 8.1.1 幅相误差 8.1.1.1 互耦效应建模 8.1.1.1.1 互耦矩阵的逆矩阵简化 8.2 阵列自校准算法 8.2.1 信号子空间拟合算法 8.2.1.1 交替优化策略 8.2.1.1.1 信源方向与误差参数的迭代更新 8.2.2 辅助源校准 8.2.2.1 单…...
Qwen3-0.6B-FP8实战案例:为嵌入式系统开发提供代码生成与调试建议
Qwen3-0.6B-FP8实战案例:为嵌入式系统开发提供代码生成与调试建议 最近在折腾一个STM32的小项目,想用PWM调个呼吸灯,结果对着手册和寄存器配置了半天,不是时钟没配对就是占空比算错,一编译还报了一堆警告。相信不少搞…...
科哥Image-to-Video镜像实战:从零开始制作你的第一个AI视频
科哥Image-to-Video镜像实战:从零开始制作你的第一个AI视频 1. 前言:为什么选择科哥的Image-to-Video镜像? 想象一下,你有一张美丽的风景照片,如果能把它变成一段生动的视频该有多好?这就是Image-to-Vide…...
QQ空间历史数据备份创新解决方案:从技术实现到场景落地
QQ空间历史数据备份创新解决方案:从技术实现到场景落地 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字记忆日益珍贵的今天,个人数据管理已成为信息时代的…...
MedGemma 1.5企业应用:三甲医院科研组如何用其加速文献摘要与机制推演
MedGemma 1.5企业应用:三甲医院科研组如何用其加速文献摘要与机制推演 1. 引言:当科研遇上AI助手 想象一下这个场景:深夜的医院科研办公室里,桌上堆满了待读的医学文献,电脑屏幕上同时打开了十几篇PDF。一位研究员正…...
