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

2023-05-16

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: 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(),但查询时候的操作符非常复杂,需要经常使用与回顾~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 了解新的 mongo id 并将其与 Iron-router 一起使用

    我有一个简单的帖子路线来寻找帖子 id 问题是pathFor助手创建这样的路径 ObjectID 52e16453431fc2fba4b6d6a8 我猜 mongoDB 插入已更改 现在 id对象在其内部包含另一个对象 称为 str 这是我
  • Mongod 错误(用自制程序安装)

    我已经安装了 mongodb brew install mongodb 已创建文件夹 mkdir p data db 处理权限 sudo chown R id un data db Run mongod 错误日志 2018 01 06T14
  • Spring Data MongoDB:聚合框架 - 使用嵌套属性进行排序会抛出无效引用

    I found Spring论坛上的这篇文章 http forum spring io forum spring projects data nosql 130522 spring data mongodb aggregation fram
  • 如何使用对象数组创建猫鼬模式

    我有这个 json data id 1 name Sample test description this is a sample test category tests points 100 startDate 2018 02 15 00
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • MongoClient:尝试使用 Mongoose 时未连接错误

    作为课程的一部分 我正在学习 MongoDB 现在正在学习 Mongoose 我已经完全按照课程中的方式编写了代码 但是当尝试使用node app js 我收到以下错误 node app js Output node 25772 Unhan
  • MongoDB 仅插入唯一电子邮件条件不起作用

    在我的猫鼬模式中 我有以下两个字段 username type String required true user name required trim true unique true email type String required
  • 在 Google App Engine 上连接 Mongoose

    我已在 Google App Engine 上成功部署了自定义 Node js 应用程序 但是 我在启动应用程序时遇到问题 因为猫鼬在尝试连接时超时 令人沮丧的是 猫鼬在我的本地计算机上以完全相同的参数连接得很好 我的 MongoDb UR
  • 如何在 Nodejs - mongodb 搜索中对结果进行排序,但是,通过调用动态方法

    我正在 Nodejs 中开发一个 Web 应用程序 通过 mongo 本机连接器连接到 mongodb 在我的一个 js 文件中 我有一个通用方法来调用 find 或 findOne 操作以从 mongodb 集合中检索我需要的任何内容 如
  • MongoDB:计算数组中的项目数

    我有一个集合 其中集合中的每个文档都有一个名为的数组foo包含一组嵌入文档 目前 MongoDB shell 中是否有一种简单的方法来计算其中有多少个实例foo 就像是 db mycollection foos count or db my
  • Mongodb 以不区分大小写的方式排序

    我在 Nodejs express 中以 mongodb 作为数据库的一个项目中非常努力地构建 当我使用 sort 获取所有数据时 它以错误的方式返回数据 那么有没有办法按照我的预期得到正确的格式 如下所示 如果我们在数据库中有三个记录 i
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • 无法启动 MongoDB:Windows 中的系统错误 1067

    在 Windows Server 2008 R2 上设置 MongoDB 服务后 出现此错误 C mongodb bin gt net start MongoDB The Mongo DB service is starting The M
  • shell中如何从数组中随机选择一个项目

    我正在 Shell 脚本中创建一个机器人 Array with expressions expressions Ploink Poink I Need Oil Some Bytes are Missing Poink Poink Piiii
  • MongoDb 中的全局自增字段

    有没有办法在集合中创建全局自动递增的值 Perforce 有一个变更列表的概念 它可以成为无状态更新的强大功能 我正在考虑相同类型的功能 例子 create gt DocA name foo gt changelist 1 create g
  • 我需要显式关闭连接吗?

    我持有一个实例MongoClient and DB在我的应用程序中 每次我想执行某些操作时 我都会调用getCollection 我想知道是否需要显式关闭连接 就像connection close 在 JDBC 中 强调一下 我只有一个Mo
  • 将base64图像转换为Node Js中的文件

    我是 Node Js 新手 我需要包含用户的个人资料图片 我从 IOS 应用程序收到 Base64 图像的请求 我需要将其存储在 images 文件夹中并将图像路径保存在 mongodb 数据库中 我使用了以下代码 var bitmap n
  • 如何让 STDOUT 和 STDERR 都转到终端和日志文件?

    我有一个脚本 将由非技术用户交互式运行 该脚本将状态更新写入 STDOUT 以便用户可以确定脚本运行正常 我希望将Stdout和STDERR重定向到终端 以便用户可以看到脚本正在工作 并查看是否存在问题 我还希望将两个流都重定向到日志文件

随机推荐

  • 树莓派设置自动连接无线网络

    树莓派开机后自动连接无线网络方法 xff0c 亲测有效 1 在任意方法 xff08 无线或有线 xff09 已经连接树莓派的基础上 xff0c 执行该命令 xff0c 意思是编辑wpa supplicant conf这个文件 内容如下 xf
  • 常用快捷键(1)----Windows组合键

    单个的Windows键是打开和隐藏开始菜单 xff0c 功能与 Esc 43 Ctrl 组合键功能相同 下面是一些常用的Windows组合键 xff1a 1 快捷键 xff1a Windows 43 Shift 43 S 功能 xff1a
  • android 获取唯一Id,小小总结一下。仅供参考

    1 获取imei xff1a 前言 xff1a 因传统的移动终端设备标识如国际移动设备识别码 xff08 IMEI xff09 等已被部分国家认定为用户隐私的一部分 xff0c 并存在被篡改和冒用的风险 xff0c 所以在Android 1
  • xib中添加自定义可编辑属性

    IOS开发中 xff0c 有些人喜欢使用xib来进行项目的开发 xff0c 使用xib可以使界面可视化 xff0c 很多控件的属性设置都可以在 xib 中设置 xff0c 减少了代码量 xff1b 同时不用一遍遍的运行程序看效果 xff0c
  • STM32使用寄存器工程模板点亮一个LED灯

    1 环境说明 xff08 1 xff09 使用的是普中STM32F103开发板 xff08 2 xff09 keil 5软件 2 目的 点亮开发板上的LED1灯 3 步骤 xff08 1 xff09 定义一系列寄存器的宏 span clas
  • 结构体数组的使用

    测试源码 span class token macro property span class token directive keyword include span span class token string lt stdio h
  • string字符串拼接

    功能描述 实现在字符串末尾拼接字符串 函数原型 xff1a string amp operator 43 61 const char str 重载 43 61 操作符string amp operator 43 61 const char
  • 千万不要在TX2上安装Qt6

    失败 xff01 Nvidia TX2安装Qt6 和qtCreator7 手把手一步步 千万不要想在TX2上安装QT6 xff01 XCB缺失几乎无解 xff0c 如果有大佬可以指导一下 最开始准备使用交叉编译的方案给TX2写程序 因为台式
  • 最新WSL2 ubuntu环境 cuda,教程,适用于40系显卡

    实验环境 xff1a ubuntu2204 ubuntu1804 xff0c 最新4060笔记本电脑 xff0c 自我觉得是目前比较好用的搭配 xff1a wsl2 43 gnome 43 wsl中的pycharm xff0c 写的很全 x
  • 高分辨率机器安装 Ubuntu虚拟机的屏幕显示字体过小问题的解决

    在网上搜索了很多的解决方案 xff0c 有的试了没效果 xff0c 有的比较麻烦 xff0c 没尝试了 我说一下我的解决方案 问题 xff1a 首先我这个机器是2k屏的 xff0c 分辨率就是会大于 1920x1080 xff1b 然后我是
  • IDEA rebuild project idea如何重新编译项目

    idea如何重新编译项目 1 2 3 4 5 6 7 分步阅读 idea工具可以用于多种语言来开发项目 xff0c 如果是像java这样需要编译之后运行的编程语言 xff0c 每次在运行项目之前都需要对源码进行编译 一般的情况下都是idea
  • Ubuntu更新软件时报"http://cn.archive.ubuntu.com/ubuntu"相关错误的解决方案

    一 问题日志 W 仓库 http cn archive ubuntu com ubuntu xenial Release 没有 Release 文件 N 无法认证来自该源的数据 xff0c 所以使用它会带来潜在风险 N 参见 apt sec
  • 《uni-app》一个非canvas的飞机对战小游戏实现-我方飞机实现

    这是一个没有套路的前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 接下来的几篇都是uni app的小实战
  • 《Vue插件》瀑布流插件vue-masonry的使用与踩坑记录

    这是一个没有套路的前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 主页 oliver尹的主页 格言 跌倒了
  • 《uni-app》一个非canvas的飞机对战小游戏实现-子弹模型的实现

    这是一个没有套路的前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 接下来的几篇都是uni app的小实战
  • 《uni-app》一个非canvas的飞机对战小游戏实现-碰撞检测的实现

    这是一个没有套路的前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 接下来的几篇都是uni app的小实战
  • 《MongoDB》MongoDB的简介与体系结构

    这是一个没有套路的前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 主页 oliver尹的主页 格言 跌倒了
  • 《MongoDB》在docker中用得到关于MongoDB一行命令

    前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 主页 oliver尹的主页 格言 跌倒了爬起来就好 xff
  • 《MongoDB》Mongo Shell中基本操作-ObjectId和文档创建详解

    前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 主页 oliver尹的主页 格言 跌倒了爬起来就好 xff
  • 《MongoDB》Mongo Shell中的基本操作-文档查询

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