《MongoDB》Mongo Shell中的基本操作-文档查询

news2024/11/23 7:18:58

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
来个关注吧,点个赞吧,谢谢

《MongoDB》Mongo Shell中的基本操作-文档查询

  • 一、简介
  • 二、内容概述
  • 三、文档读取
    • 3.1 db.collection.find()
      • 读取全部文档
      • 读取匹配文档
      • 比较操作符查询
        • $eq 操作符
        • $ne操作符
        • $gt操作符
        • $gte操作符
        • $lt操作符
        • $lt操作符
        • $in 操作符
        • $nin 操作符
      • 逻辑操作符查询
        • $not 操作符
        • $and 操作符
        • $or 操作符
        • $nor 操作符
      • 字段操作符
        • $exists 操作符
        • $type 操作符
      • 数组操作符
        • $all 操作符
        • $elemMatch 操作符
        • $all 操作符和 $elemMatch 操作符联合使用
      • 运算操作符
        • $regex 正则操作符
  • 四、小结

一、简介

本篇记录备份的是Mongo DB的一些基础知识,包括文档长什么样子,Mongo Shell中的CRUD这四种基本操作,什么是CRUD?C(Creadt、创建)R(Read、读取)U(Update、更新)D(Delete、删除),人话就是增、删、改、查等等;
注意,本文中的示例命令都是基于Mongo Shell的,并不是直接运行在类似于node代码中的~

二、内容概述

本文主要分享的内容是如何 通过find()命令进行数据查询,还有很多的操作符包括:比较操作符逻辑操作符字段操作符数组操作符 以及 运算操作符,具体内容如下:
在这里插入图片描述

三、文档读取

3.1 db.collection.find()

find方法是MongoDB中查询的方法,也是整个数据库操作中最常用的方法

db.<collection>.find(<query>,<projection>)

find方法接收两个参数,第一个参数:

  • query:定义了读取操作时筛选文档的条件,也就是过滤条件;
  • projection:定义了对读取结果进行的投射;

什么是投射?简单的说就是可以对结果进行进一步筛选,只返回部分指定的字段,比如一个文档一共有10个字段,但是我们只需要其中的5个,那么通过预设好的投射,可以只返回这5个字段;

读取全部文档

db.<collection>.find()

不添加任何筛选条件即可,返回的是 collection 下的所有数据

读取匹配文档

在第一个参数中 query 添加对应的条件,比如想要查询username是oliver的数据,那么可以这么写

db.<collection>.find({ username : 'oliver' })

查询到的结果是username为oliver的这条数据的全部信息

{
	"_id":new ObjectId("620327ed5a4fe9fe824daa24"),
	"username":"oliver",
	"age":18,
	...
}

当然,这个字段是可以多重的,多重代表着精度更为准确,因为有时候可能会有相同的查询条件的数据,比如username有很多数据都叫oliver,因此,更多的条件代表着更准确的搜索

db.<collection>.find({ username : 'oliver', age : 18 })

比较操作符查询

db.<collection>.find({ <field> : {$<operator>:<value>} })
  • collection: 集合的名称;
  • field: 查询的字段名字,比如上面一小节中的username,age等都属于这个;
  • $operator: 比较操作符;
  • value: 比较值,比如上面一小节中的oliver,18等值;

$eq 操作符

匹配字段值 相等 的文档;

db.<collection>.find({ username : {$eq:'oliver'} })

找到字段username的值 等于 oliver的数据;

$ne操作符

匹配字段值 不相等 的文档;

db.<collection>.find({ username : {$ne:'oliver'} })

找到字段username的值 不等于 oliver的数据;

$gt操作符

匹配字段值 大于 查询值的文档;

db.<collection>.find({ age : {$gt:18 } })

找到字段age的值 大于 18的数据;

$gte操作符

匹配字段值 大于 或者 等于 查询值的文档;

db.<collection>.find({ age : {$gte:18 } })

找到字段age的值 大于 或者 等于 18的数据;

$lt操作符

匹配字段值 小于 查询值的文档;

db.<collection>.find({ age : {$lt:18 } })

找到字段age的值 小于 18的数据;

$lt操作符

匹配字段值 小于 或者 等于 查询值的文档;

db.<collection>.find({ age : {$lt:18 } })

找到字段age的值 小于 或者 等于 18的数据;

$in 操作符

匹配字段值于任意一个查询值相等的文档$in 这个操作符的用法如下:

db.<collection>.find({ <field> : {$in:[<value1>,<value2>...<<valueN>]} })

看个例子

db.<collection>.find({ username : {$in:['oliver','test']} })

这个查询的意思就是,任何一个文档的username只要是oliver或者是test都将被查询出来;

$nin 操作符

匹配字段值与任何查询值都不相等的文档$nin这个操作符的用法如下:

db.<collection>.find({ <field> : {$nin:[<value1>,<value2>...<<valueN>]} })

还是拿上方的那个例子

db.<collection>.find({ username : {$in:['oliver','test']} })

这个查询的意思就是,除了username是oliver或者是test的所有文档都将被查询出来

逻辑操作符查询

模版如下:

db.<collection>.find({ <field> : {<operator>} })

$not 操作符

匹配筛选条件 不成立 的文档;

db.<collection>.find({ age : {$not:{$lt:18} })

查询所有age字段 不小于 18的数据;

$and 操作符

匹配多个筛选条件 全部成立 的文档;

db.<collection>.find({$and:[{expression1},{expression2},...,{expressionn}] })

具体例子

db.<collection>.find({$and:[{age:{$gt:18}},{name:{$eq:'oliver'}}] })

查询所有age大于18,并且name值是oliver的数据;

$or 操作符

匹配 至少一个筛选条件成立的文档

db.<collection>.find({$or:[{expression1},{expression2},...,{expressionn}] })

具体例子

db.<collection>.find({$or:[{age:{$gt:18}},{name:{$eq:'oliver'}}] })

查询所有age大于18,或者 name值 是oliver的数据;

$nor 操作符

匹配 全部筛选条件都不成立的文档

db.<collection>.find({$nor:[{expression1},{expression2},...,{expressionn}] })

具体例子

db.<collection>.find({$nor:[{age:{$gt:18}},{name:{$eq:'oliver'}}] })

查询所有age不大于18,并且 name值 也不是oliver的数据;

字段操作符

$exists 操作符

匹配 包含查询字段 的文档

db.<collection>.find({<field>:{$exists:<boolean>}})

具体例子

db.<collection>.find({age:{$exists:true}})

查询所有包含age字段的文档,

$type 操作符

匹配字段类型 符合查询值 的文档

db.<collection>.find({<field>:{$type:<BSON type>}})
// 或者接受一个数组
db.<collection>.find({<field>:{$type:[<BSON type1>,<BSON type2>]}})

具体例子

db.<collection>.find({name:{$type:"string"}})

查询所有包含 name 字段,并且 name字段的值是string类型 的文档,如果是数组的话

db.<collection>.find({name:{$type:["string","number"]}})

查询所有包含 name 字段,并且 name字段的值是string类型或者是数字类型 的文档;

数组操作符

数组操作符查询的是字段类型为数组的值

$all 操作符

匹配数组字段中包含所有查询值的文档;

db.<collection>.find({<field>:{$all:[<value1>,<value2>]}})

具体例子

db.<collection>.find({contact:{$all:["a","b"]}})

查找所有具有字段contact中同时 存在a和b的项

$elemMatch 操作符

匹配数组字段中至少存在一个值满足刷选,这个有点想上面的$or 操作符

db.<collection>.find({<field>:{$elemMatch:{<value1>,<value2>}}})

具体例子

db.<collection>.find({contact:{$elemMatch:{$gt:"1000",$lt:"2000"]}})

查找所有具有字段contact中 存在大于1000小于2000的数据

$all 操作符和 $elemMatch 操作符联合使用

查询contact中大于1000小于2000和大于3000小于4000的项

db.<collection>.find({contact:{$all:[
  {$elemMatch:{$gt:"1000",$lt:"2000"]},
  {$elemMatch:{$gt:"3000",$lt:"4000"]},
]}})

运算操作符

$regex 正则操作符

匹配 满足正则表达式的文档

db.<collection>.find({<field>:{:/pattern/,:'<options>'}})

具体例子

db.<collection>.find({name:{$regex:/oliver/,$options:'i'}})

读取用户姓名包含oliver的文档,不区分大小写

四、小结

本文主要记录了在常规数据库操作中文档查询的一些用法~查询的命令非常简单,都是db.collection.find(),但查询时候的操作符非常复杂,需要经常使用与回顾~

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

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

相关文章

在Word、WPS中插入AxMath公式导致行间距异常的解决办法

引言 我最近需要写一些文章&#xff0c;在排版时发现AxMath插入的公式竟然会导致行间距异常&#xff0c;如下图所示&#xff1a; 查遍互联网&#xff0c;最有效的办法竟然要取消文档网格对齐&#xff0c;这对于一些严格要求的场合是非常不利的&#xff0c;经过我的尝试&#…

xss-labs/level15

因为前一关打不开了 所以直接跳到15关来 查看源代码 他的输出点位于属性值处 所以要想通过<script></script>实现弹窗效果的话 那么就要逃离属性值 那么势必要闭合引号 根据以上的分析 我们做出如下构造 "><script>alert(xss)</script>// …

使用 Mason 创建自己的 Flutter brick

使用 Mason 创建自己的 Flutter brick 原文 https://medium.com/gytworkz/create-your-own-flutter-brick-using-mason-7abc70d0324e 前言 谁不喜欢用最少的努力完成大部分事情呢&#xff1f;我当然知道! &#xff01;Mason 帮我完成了几个简单的步骤。 在本文中&#xff0c;我…

观察者(订阅)模式

文章目录思考观察者模式1.观察者模式的本质2.何时选用观察者模式3.优缺点4.实现手写观察者模式JDK观察者模式思考观察者模式 观察者模式是典型的发布订阅模式&#xff0c;当一个东西有变化了&#xff0c;就通知所有订阅他的人 1.观察者模式的本质 观察者模式的本质:触发联动。 …

什么是等保

等保的全称是信息安全等级保护&#xff0c;是《网络安全法》规定的必须强制执行的&#xff0c;保障公民、社会、国家利益的重要工作。以下是一些有关等保的基本知识&#xff0c;希望通过这些知识能让大家更深刻地认识到等级保护的重要性。 等级保护定义 信息安全等级保护是指…

2.Conv2d实现

[C 基于Eigen库实现CRN前向推理] 第二部分&#xff1a;Conv2d实现 前言&#xff1a;(Eigen库使用记录)第一部分&#xff1a;WavFile.class (实现读取wav/pcm,实现STFT)第二部分&#xff1a;Conv2d实现第三部分&#xff1a;TransposedConv2d实现 (mimo,padding,stride,dilatio…

智工教育:注册计量师职业资格条件已改革!

第一&#xff0c;报名条件发生变化 注册计量师职业资格考试&#xff0c;取消了一级注册计量师职业资格考试报考条件中对工作年限的要求。 凡遵守中华人民共和国宪法、法律、法规&#xff0c;恪守职业道德&#xff0c;诚实守信&#xff0c;从事计量技术工作&#xff0c;符合注册…

Codeforces Round #290 (Div. 2) C. Fox And Names

翻译&#xff1a; Fox Ciel将发表一篇关于FOCS (Fox操作的计算机系统&#xff0c;发音:“Fox”)的论文。她听到一个谣言:报纸上的作者名单总是按照词典顺序排列的。 在查看了一些例子后&#xff0c;她发现有时这不是真的。在一些论文中&#xff0c;作者的名字没有按照正常意义…

【无人机】四轴无人机的轨迹进行可视化和动画处理(Matlab代码实现)

&#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ ​ 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 随着传感器检测技术、智能控制技术和材料技术的快速发展,四轴无人机及其配套系统的发展越来越成熟。无人机遥感系统具有成本低、…

Java数据结构之Map与Set

文章目录一、搜索&#xff08;一&#xff09;概念及场景&#xff08;二&#xff09;模型二、Map&#xff08;一&#xff09;介绍&#xff08;二&#xff09;Map常用方法说明1.需要注意的几个点2.特别注意的几个方法(1)V getOrdefault(Object key,V defaultValue)&#xff0c;这…

【DL with Pytorch】第 5 章 :风格迁移

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

[JavaEE]计算机是如何工作的

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1. javaEE概述 2. 计算机发展史 3. 冯诺依曼体系 …

java面试强基(15)

说明一下public static void main(String args[])这段声明里每个关键字的作用? ​ public: main方法是Java程序运行时调用的第一个方法&#xff0c;因此它必须对Java环境可见。所以可见性设置为 pulic. ​ static: Java平台调用这个方法时不会创建这个类的一个实例&#xf…

如何将带GPS的网络化的软件定义无线电接收机应用于分布式和移动频谱监测?(二)

GPS定位和测向的四种技术 知道感兴趣信号的位置对于许多应用很重要。军事用户获得了更好的态势感知能力&#xff0c;诸如机场或公用事业基础设施之类的敏感设施可以找到RF干扰源&#xff0c;电信公司可以识别恶意发射机或其他干扰其覆盖范围的设备。通过嵌入式GPS功能了解测量…

中国什么时候能办世界杯?

自从1930年在乌拉圭举办了第一届世界杯以来&#xff0c;到现在已经成功举办了22届&#xff0c;然而这22届里&#xff0c;光是欧洲就举办了11届&#xff0c;南美洲5届&#xff0c;中北美洲3届&#xff0c;亚洲2届&#xff0c;非洲1届。 说到这里不难发现&#xff0c;他们之间分布…

Azure DevOps Server 用户组加入 Azure AD Domain Service 管理用户

一&#xff0c;引言 今天我们继续讲解 Azure DevOps Server 的内容&#xff0c;对于管理用户组除了在 Azure DevOps Server 服务器上添加管理员方式外&#xff0c;还有没有其他方式&#xff0c;Azure DevOps 需要加入Azure ADDS 服务域后&#xff0c;Azure DevOps Server 的管理…

[附源码]计算机毕业设计springboot基于vue+mysql开发的考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

图扑软件荣获第七届“创客中国”中小企业创新创业大赛优胜奖!

2022 年 11 月 17 日&#xff0c;由工业和信息化部、财政部共同主办的第七届“创客中国”中小企业创新创业大赛全国总决赛在浙江杭州落下帷幕。 本次《第七届“创客中国”中小企业创新创业大赛》举办目的&#xff0c;意在加大优质中小企业梯度培育力度&#xff0c;进一步提升中…

ProcessDB实时/时序数据库——ODBC之连接数据库

目录 前言 一、安装ProcessDB-ODBC驱动 1.下载ProcessDB-ODBC驱动 2.安装ProcessDB-ODBC驱动 二、配置ProcessDB数据源 三、JAVA连接ProcessDB数据库 前言 ProcessDB实时/时序数据库支持ODBC连接数据库&#xff0c;接下来将和大家分享下如何使用ODBC操作ProcessDB实时/时…

Java基础之《netty(5)—NIO之Selector》

一、基本介绍 1、Java的NIO&#xff0c;用非阻塞的IO方式&#xff0c;可以用一个线程&#xff0c;处理多个的客户端连接&#xff0c;就会使用到Selector&#xff08;选择器&#xff09;。 2、Selector能够检测多个注册的通道上是否有事件发生&#xff08;注意&#xff1a;多个…