mongodb 查询语句学习笔记

基础查询

正则查询

{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.mzph.cn/diannao/37942.shtml

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

相关文章

2024年机动车签字授权人题库,助你冲刺!绝对不会让你后悔!

61.&#xff08;&#xff09;使汽车按驾驶人选定的方向行驶。 A.传动系统 B.行驶系统 C.转向系统 D.制动系统 答案&#xff1a;C 62.&#xff08;&#xff09;使汽车各总成及部件安装在适当的位置&#xff0c;对全车起支承作用以保证汽车正常行驶。 A.传动系统 B.行驶系…

HDFS学习

3.5 HDFS存储原理 3.5.1 冗余数据保存 作为一个分布式文件系统&#xff0c;为了保证系统的容错性和可用性&#xff0c;HDFS采用了多副本方式对数据进行冗余存储&#xff0c;通常一个数据块的多个副本会被分布到不同的数据节点上。 如图所示&#xff0c;数据块1被分别存放到…

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品&#xff0c;主要是出于安全考虑&#xff0c;以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性&#xff1a; 本质安全设计&#xff1a;顶坚专业防爆手机采用了本质安全&#xff08;本安…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积

47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

昇思25天学习打卡营第5天|数据变换Transforms

数据变换Transforms 介绍Transforms分类Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 参考 介绍 MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数据处理Pipeline来实现数据预处理。 所有…

连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接

JDBC连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接 前言解决办法一解决办法二总结 前言 今天使用jdbc连接sql server突然报错为&#xff1a;SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“fals…

文件夹内-资源名称前加序号排列

问题&#xff1a;在文件夹下的资源可以按时间排序&#xff0c;导入unity后资源顺序会乱掉&#xff0c;不方便按顺序赋值&#xff0c;为了方便&#xff0c;通过下面方法在文件夹下统一在资源名称前按顺序加上序号 win11在文件夹内右键&#xff0c;选择——在终端中打开 输入&a…

制造企业用AI可以做什么?

ChatGPT横空出世&#xff0c;有关AI的浪潮席卷全球&#xff0c;比起人工智能如何改变世界&#xff0c;可能你更感兴趣我能用AI可以做的事情是什么&#xff1f; 制造企业用AI可以做的事情是什么?人工智能在制造企业中可以做很多事情&#xff0c;以下是一些主要的应用&#xff1…

企业源代码加密软件丨透明加密技术是什么

在一个繁忙的软件开发公司中&#xff0c;两位员工小李和小张正在讨论源代码安全的问题。 “小张&#xff0c;你有没有想过我们的源代码如果被泄露了怎么办&#xff1f;”小李担忧地问。 “是啊&#xff0c;这是个大问题。源代码是我们的核心竞争力&#xff0c;一旦泄露&#…

LUA 语言中subtree 的使用教程

在线编辑器&#xff1a; https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua语言中&#xff0c;"subtree"通常指的是一个子表或者子树&#xff0c;它指的是一个Lua表&#xff08;table&#xff09;中的一个部分&#xff0c;可以是一个单…

<电力行业> - 《第8课:输电(一)》

1 输电环节的意义 电能的传输&#xff0c;是电力系统整体功能的重要组成环节。发电厂与电力负荷中心通常都位于不同地区。在水力、煤炭等一次能源资源条件适宜的地点建立发电厂&#xff0c;通过输电可以将电能输送到远离发电厂的负荷中心&#xff0c;使电能的开发和利用超越地…

fiddler使用

1、设置抓取HTTPS的请求 先选中浏览器Browser---Chrome 默认是不抓https的数据包的 有时我们抓取的的包是https的&#xff0c;不是http的&#xff0c;就要做一些设置 Tools---Options 勾选Capture HTTPS CONNECTs 勾选Decrypt HTTPS traffic 勾选 Ignore server certificat…

(单机版)神魔大陆|v0.51.0|冰火荣耀

前言 今天给大家带来一款单机游戏的架设&#xff1a;神魔大陆v0.51.0:冰火荣耀。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; (单机版)神魔大陆 下面我将详细的教程交给大家&#xff0c;请耐心阅…

[数据集][目标检测]电力场景下电柜箱门把手检测数据集VOC+YOLO格式1167张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1167 标注数量(xml文件个数)&#xff1a;1167 标注数量(txt文件个数)&#xff1a;1167 标注…

编译工具-Gradle

文章目录 Idea中配置Gradle项目project目录settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期编写Settings.gradle编写Build.gradleTasksPlugins Idea中配置 配置项&#xff1a;gradle位置 及仓库位置 Gradle项目 Task&#xff0c;settings.gradle,build.…

Web渗透-命令执行漏洞及常见靶场探测实战

一、概述 命令执行&#xff08;RCE&#xff09;&#xff1a;应用有时需要调用一些执行系统命令的函数&#xff0c;如php中的system,exec,shell exec,passthru,popen,proc popen等&#xff0c;当用户能控制这些函数的参数时&#xff0c;就可以将恶意系统命令拼接到正常命令中&a…

004-GeoGebra基础篇-GeoGebra的点

新手刚开始操作GeoGebra的时候一般都会恨之入骨&#xff0c;因为有些操作不进行学习确实有些难以凭自己发现。 目录 一、点的基本操作1. 通过工具界面添加点2. 关于点的选择&#xff08;对象选择通用方法&#xff09;&#xff08;1&#xff09;选择工具法&#xff08;2&#xf…

Java新手启航:Windows下JDK安装,开启编程之旅

你是不是对编程充满好奇&#xff0c;想要迈入Java的世界&#xff0c;却不知道从何开始&#xff1f;别担心&#xff0c;每一个Java大师都是从安装JDK开始的&#xff0c;而今天&#xff0c;我将手把手教你如何轻松完成JDK的安装&#xff0c;让你迈出编程之旅的第一步! 接下来&am…

websocket基础使用学习

websocket基础使用学习 一、websocket是什么&#xff1f;二、使用步骤1.websocket服务的安装与启动安装服务连接与发消息 总结 一、websocket是什么&#xff1f; 以前&#xff0c;很多网站为了实现推送技术&#xff0c;所用的技术都是Ajax 轮询。轮询是在特定的的时间间隔&…

ios18开发者预览,Beta 2升级新增镜像等功能

近日&#xff0c;苹果发布了 iOS 18 开发者预览版 Beta 2 升级&#xff0c;为 iPhone 用户带来了多项新功能。据了解&#xff0c;这些新功能包括 iPhone 镜像和 SharePlay 屏幕共享&#xff0c;以及其他新增功能。 据了解&#xff0c;iPhone镜像可以让Mac用户将iPhone屏幕镜像…