mongodb 查询语句学习笔记

news2024/10/9 4:24:14

基础查询

正则查询

{
   status: 'A',
   $or: [
     { qty: { $lt: 30 } }, { item: { $regex: '^p' } }
   ]
}

AND 查询

{ "size.h": { $lt: 15 }, "size.uom": "in", status: "D" }

OR 查询

{ $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }

AND 和 OR 混合

{ status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] }

嵌套对象查询

用点号来查询嵌套字段

这种方式写的带点号的字段必须包含在双引号之中

{ "size.h": { $lt: 15 } }
{ "size.uom": "in" }

匹配嵌套文档对象

注意❗这种查询方式是字段顺序相关的,也就是说:

{
    item: 'journal',
    qty: 25,
    size: { h: 14, w: 21, uom: 'cm' },
    status: 'A'
},

// 查得到数据
{ size: { h: 14, w: 21, uom: "cm" } }

// 查不到数据
{ size: { w: 21, h: 14, uom: "cm" } }

数组查询

数组类型的匹配查询时,也是顺序相关的

{ tags: ["red", "blank"] }

在这里插入图片描述

// 查询到不一样的结果
{ tags: ["blank", "red"] }

在这里插入图片描述

查询一个数组值中包含指定的复数成员, 顺序无关

{ tags: { $all: ["red", "blank"] } }

查询一个数组中是否至少包含一个指定的成员

// tags 是一个数组,查询是否有成员 red
{ tags: "red" }

查询文档中所有记录的 dim_cm 数组,获取其中至少有一个成员值大于 25 的记录

{ dim_cm: { $gt: 25 } }

比较特殊的样例, 当数组值查询时, 数组中任一成员满足其中一个条件,就会被认定为符合条件

{ dim_cm: { $gt: 15, $lt: 20 } }

比如这一条,只要 dim_cm 中有成员值大于 15 或者小于 20,本条记录就会被返回。而不是直觉上的同时满足大于 15 和小于 20

在这里插入图片描述

使用 $elemMatch 来完成复数条件查询

上面的反例,想要查询任一成员同时满足多个条件的数组时,需要用 $elemMatch

{ dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } }

对比刚刚的查询,结果数变少了

在这里插入图片描述

对固定位置的元素进行查询

使用前面嵌套字段查询提到的 . 操作符,可以对数组字段中指定位置的元素值进行查询

{ "dim_cm.1": { $gt: 25 } }

指定数组的长度条件

查询 tags 的成员数等于 3 的记录

{ "tags": { $size: 3 } }

对象数组的查询

成员值完全匹配查询

查询成员字段 warehouse = ‘A’ 和 qty = 5 的记录,顺序相关

{ "instock": { warehouse: "A", qty: 5 } }

对成员中的某个字段查询

. 操作符的使用

查询 instock 成员中 qty >= 20 的记录

{ 'instock.qty': { $lte: 20 } }

对固定位置的成员进行查询

{ 'instock.0.qty': { $gt: 10, $lte: 20 } }

查询至少一个成员满足复数条件的文档

使用 $elemMatch 可以进行复数条件查询,顺序无关。前面没有使用 $elemMatch 就是值查询,是顺序相关的。

{ "instock": { $elemMatch: { qty: 5, warehouse: "A" } } }

查询成员满足任意条件的文档

会查出有成员 qty > 10 或者 qty <= 20 的文档

{ "instock.qty": { $gt: 10,  $lte: 20 } }

另一个样例:
这里也是只要有成员满足这两个条件之一,这条记录就会被查到,不必要有一个成员同时满足两个条件。

{ "instock.qty": 5, "instock.warehouse": "A" }

在这里插入图片描述

查询成员字段同时满足多个条件

这个例子官方文档没有提到, 和上面的对比是现在至少一个成员的 qty 值要同时满足两个条件才会被查到

{ "instock": { $elemMatch: { qty: { $gt: 10,  $lte: 20  } }  } }

总结一下的点操作符用到的场景

  1. 嵌套对象字段查询
{ "size.h": { $lt: 15 } }
{ "size.uom": "in" }
  1. 数组固定位置的元素进行查询
{ "dim_cm.1": { $gt: 25 } }
  1. 对象数组中对成员字段进行查询
{ 'instock.qty': { $lte: 20 } }
  1. 对象数组中对固定位置的成员进行查询
{ 'instock.0.qty': { $gt: 10, $lte: 20 } }

Project 返回你想要的字段

基础使用

在填写 project 的地方传入下面的对象,返回的记录中就只会有 itemstatus 和一个默认的 _id 字段

{ item: 1, status: 1 }

在这里插入图片描述

删除 _id

不想要 _id 就在 project 里面给个 0 值就行

{ item: 1, status: 1, _id: 0 }

在这里插入图片描述

上面的语句同时使用了 1 来标记需要展示字段,和 0 来删除 _id,这种用法仅限于 _id 字段

仅删除不需要的字段

有时需要显示的字段很多,不需要的很少,可以仅用 0 删除不需要的字段。

{ status: 0, instock: 0 }

在这里插入图片描述

嵌套对象的 Project

就用前面学到的 . 操作符就好了

{ item: 1, status: 1, "size.uom": 1 }

在这里插入图片描述

仅删除不要字段也是给个 0 就行

{ "size.uom": 0 }

对象数组中的 Project

返回结果的 instock 数组成员仅有 qty 字段

{ item: 1, status: 1, "instock.qty": 1 }

在这里插入图片描述

数组元素的 Project

  • $elemMatch

对数组元素的 Project 会复杂一些,官方提供了三种操作:
$elemMatch, $slice, $

首先是前面见得比较多的 $elemMatch, 当这个从操作出现在 Project 里面时,就是对数组字段的成员进行筛选,返回符合条件第一个成员。

{"students": { $elemMatch: { age: { $gte: 10, $lte: 20 } } }}

在这里插入图片描述

  • $slice

对数组成员进行切片,三种语法

$slice: 正数
返回数组的前 2 个成员

{"students": { $slice: 2 }}

$slice: 负数
返回数组的后 2 个成员

{"students": { $slice: -2 }}

$slice: [n, m]
先跳过数组的前 n 个成员,再返回 m 个成员

{"students": {$slice: [1, 2]}}
  • $

这个符号需要在查询时有对数组字段附加了查询条件,这样就可以在 Project 时用这个符号来返回符合查询条件的第一个成员

query: {zipcode: "63109", "students.age": { $gt: 10 }}
project: {"students.$": 1}

在这里插入图片描述

管道 Aggregation (持续更新,创作中)

管道可以说是 MongoDB 最核心的东西了。

$unwind

对一个数组字段 $unwind, 就会将数组的每个成员当成输入,然后根据情况不断替换原来的数组字段,并产生一个新的文档

举例:

{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }

对 sizes 进行 $unwind

db.inventory.aggregate( [ { $unwind : "$sizes" } ] )

得到结果:
原本的数组成员被展开了,分别替换原来的数组字段形成新的文档

{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }

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

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

相关文章

万界星空科技自动化运维管理---设备管理

在信息化管理体系建设中&#xff0c;设备管理系统被看作是重中之重。因为设备是工厂生产中的主体、生命线&#xff0c;随着科学技术的不断发展、智能制造的产业升级&#xff0c;生产设备日益智能化、自动化&#xff0c;设备在现代工业生产中的作用和影响也随之增大&#xff0c;…

智能体——父亲兴趣爱好助手

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Sectigo或RapidSSL DV通配符SSL证书哪个性价比更高?

在当前的网络安全领域&#xff0c;选择一款合适的SSL证书对于保护网站和用户数据至关重要。Sectigo和RapidSSL作为市场上知名的SSL证书提供商&#xff0c;以其高性价比和快速的服务响应而受到市场的青睐。本文将对Sectigo和RapidSSL DV通配符证书进行深入对比&#xff0c;帮助用…

java设计模式(四)原型模式(Prototype Pattern)

1、模式介绍&#xff1a; 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许对象在创建新实例时通过复制现有实例而不是通过实例化新对象来完成。这样做可以避免耗费大量的资源和时间来初始化对象。原型模式涉及一个被复制的原型对象…

【机器学习】在【R语言】中的应用:结合【PostgreSQL数据库】的【金融行业信用评分模型】构建

目录 1.数据库和数据集的选择 1.准备工作 2.PostgreSQL安装与配置 3.R和RStudio安装与配置 2.数据导入和预处理 1.连接数据库并导入数据 1.连接数据库 2.数据检查和清洗 1.数据标准化 2.拆分训练集和测试集 3.特征工程 1.生成新特征 2.特征选择 4.模型训练和评估…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

2024广东省职业技能大赛云计算赛项实战——构建CICD

构建CI/CD 前言 题目如下&#xff1a; 构建CI/CD 编写流水线脚本.gitlab-ci.yml触发自动构建&#xff0c;具体要求如下&#xff1a; &#xff08;1&#xff09;基于镜像maven:3.6-jdk-8构建项目的drone分支&#xff1b; &#xff08;2&#xff09;构建镜像的名称&#xff1a…

【threejs】火焰特效制作

2024-06-26 08-57-16火焰 shader 来源 //shadertory&#xff1a;https://www.shadertoy.com/view/ctVGD1//shadertory&#xff1a;https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…

嵌入式EMC之TVS管

整理一些网上摘抄的笔记&#xff1a; TVS管认识&#xff1a; TVS的Vc要比&#xff0c;DCDC的最大承受电压要小

mysql workbench使用schema视图导出表和列结构到excel

目的&#xff1a;导出所有表和列的名字和注释 很多时候没有正规的数据库文档&#xff0c;为了快速交流啊&#xff0c;需要一个快捷的基础。数据库建表的时候可能有注释&#xff0c;也可能没有注释。有当然好&#xff0c;查看注释就能清楚很多&#xff0c;没有的话最好一个一个补…

高效文件分类管理:快速将不同类型文件素材归类到专属文件夹,告别混乱,让工作更高效!

在数字化时代&#xff0c;我们每天都会产生大量的文件素材&#xff0c;从图片、文档到音频、视频&#xff0c;种类繁多&#xff0c;数量庞大。如果这些文件没有得到有效的管理和归类&#xff0c;不仅会让我们的工作变得混乱无序&#xff0c;还会影响我们的工作效率。那么&#…

文华WH7主图多空预警系统指标公式源码

RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;//收盘价与N周期最低值做差&#xff0c;N周期最高值与N周期最低值做差&#xff0c;两差之间做比值定义为RSV K:SMA(RSV,3,1);//RSV的移动平均 D:SMA(K,3,1);//K值的移动平均 DIFF : EMA(CLOSE,12) - EMA(CLOSE,26); D…

python-17-零基础自学python-

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版 知识点&#xff1a; 类、子类、继承、调用函数 练习内容&#xff1a; 练习9-6&#xff1a;冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为IceCreamStand的类&#xff0c;让它继承为完成练习9-1或…

spring原理篇

第三方bean默认为方法名 自动配置 自动配置的原理 springboot的自动配置原理 首先是从 SpringBootApplication这个注解出发 有一个ComponentScan()默认扫描同级包及其子包 第二个注解是springbootconfiguration 声明当前类是一个配置类 第三个是核心 enableAutoConfigurati…

HRSC2016 :推动光学遥感图像细粒度船舶检测的创新引擎(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 摘要&a…

华为OD机试【高矮个子排队】(java)(100分)

1、题目描述 现在有一队小朋友&#xff0c;他们高矮不同&#xff0c;我们以正整数数组表示这一队小朋友的身高&#xff0c;如数组{5,3,1,2,3}。 我们现在希望小朋友排队&#xff0c;以“高”“矮”“高”“矮”顺序排列&#xff0c;每一个“高”位置的小朋友要比相邻的位置高或…

pp 学习一 生产模块主数据

生产成本&#xff1a;原材料是什么&#xff0c;价格多少&#xff0c;人工耗费时间&#xff0c;以及其他的费用 离散制造&#xff1a;有生产订单。工序是分开的&#xff08;可以停&#xff09; 重复制造&#xff1a;没有生产订单&#xff08;可能有客户下达的任务单或者计划订…

昇思MindSpore基本介绍

昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 其中&#xff0c;易开发表现为API友好、调试难度低&#xff1b;高效执行包括计算效率、数据预处理效率和分布式训练效率&#xff1b;全场景则指框架同时支持云、边缘以…

学习TTS遇到的问题2 什么是TCN模型

学习TTS遇到的问题2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation&#xff1f;什么是 Dilation具体例子数学表达作用例子代码示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验9 IPv4地址 — 划分子网

一、实验目的 1.学习划分子网的方法&#xff1b; 2.验证子网掩码的作用。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.划分子网&#xff1b; …