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


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

    一、简介

    本篇记录备份的是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>)
    
    • 1

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

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

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

    读取全部文档

    db.<collection>.find()
    
    • 1

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

    读取匹配文档

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

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

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

    {
    	"_id":new ObjectId("620327ed5a4fe9fe824daa24"),
    	"username":"oliver",
    	"age":18,
    	...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    比较操作符查询

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

    匹配字段值 相等 的文档;

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

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

    $ne操作符

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

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

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

    $gt操作符

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

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

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

    $gte操作符

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

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

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

    $lt操作符

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

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

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

    $lt操作符

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

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

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

    $in 操作符

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

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

    看个例子

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

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

    $nin 操作符

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

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

    还是拿上方的那个例子

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

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

    逻辑操作符查询

    模版如下:

    db.<collection>.find({ <field> : {<operator>} })
    
    • 1
    $not 操作符

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

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

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

    $and 操作符

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

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

    具体例子

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

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

    $or 操作符

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

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

    具体例子

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

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

    $nor 操作符

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

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

    具体例子

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

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

    字段操作符

    $exists 操作符

    匹配 包含查询字段 的文档

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

    具体例子

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

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

    $type 操作符

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

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

    具体例子

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

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

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

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

    数组操作符

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

    $all 操作符

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

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

    具体例子

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

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

    $elemMatch 操作符

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

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

    具体例子

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

    查找所有具有字段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"]},
    ]}})
    
    • 1
    • 2
    • 3
    • 4

    运算操作符

    $regex 正则操作符

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

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

    具体例子

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

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

    四、小结

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

  • 相关阅读:
    C++ pair的介绍和使用输出
    机场调度管理系统(客户端+服务器端+Java+MySQL)
    上半年收入超耐克中国、大于两个李宁,安踏领跑背后的韧性
    开源库 Gson 怎么读
    React —— React中组件的三大属性(state,props,ref)
    element-ui 修改el-form-item样式
    如果你不只是个点工,那你应该知道 前后端分离与不分离的区别
    前端培训丁鹿学堂:vue3的setup语法糖总结(二)
    2023版IDEA的下载、安装、配置、快捷键、模板、插件与使用
    【HarmonyOS】取消页面转场动画
  • 原文地址:https://blog.csdn.net/zy21131437/article/details/128062682