mongodb的简单查询
此篇文章简单的记录一下mongodb 的简单查询操作。
一、数据准备:
db.persons.insertMany([
{'userId':1,name:'张三','age':20,'scores':[80,90,100],father : {name:'张三三','age':46}},
{'userId':2,name:'李四','age':21,'scores':[80,95,98],father : {name:'李四四','age':50}},
{'userId':3,name:null,'age':22,'scores':[20,40,90]},
{'userId':4,'age':23,'scores':[60,80,100]},
{'userId':5,name:'钱七','age':25,'scores':[90,95,100]}
]);
二、单个文档,简单文档的查询:
1、返回指定的字段 (返回name和age字段)
db.persons.find({},{name:1,age:1,_id : 0})
注意:1、默认会返回 _id 字段,如果想不要返回,给 _id : 0 即可。
2、find() 方法的第二个参数指定需要返回的字段,字段:1 表示返回 字段:-1 表示不返回。
3、第二个方法中不可同时出现 字段 :1 和 字段 : -1这种格式,但是 _id 可以是 -1
2、查询 name=22 的人员,直接使用 : 或 $eq 操作符
db.persons.find({age : 22});
db.persons.find({age:{$eq: 22}});
3、查找 name>22 的人员,使用 $gt 操作符
db.persons.find({age:{$gt: 22}});
4、查找 name>=22 的人员,使用 $gte 操作符
db.persons.find({age:{$gte: 22}});
5、查找 name<22 的人员,使用 $lt 操作符
db.persons.find({age:{$lt: 22}});
6、查找 name<=22 的人员,使用 $lte 操作符
db.persons.find({age:{$lte: 22}});
7、查找 name>20 && name<=22 的人员
db.persons.find({age:{$gt:20,$lte: 22}});
8、查找 name 不是 李四 的人员,使用 $ne 操作符
db.persons.find({name:{$ne: "李四"}})
9、查询 name=张三 && age>20 的人 ,使用 $and 操作符
db.persons.find({name:"张三",age:{$gt: 20}});
db.persons.find({$and: [{name:"张三"},{age:{$gt: 20}}]})
10、查询 name=张三 || age>20 的人 ,使用 $or 操作符
db.persons.find({$or: [{name:"张三"},{age:{$gt: 20}}]})
11、查询 name不是张三&&age不是>20的人,使用 $nor 操作符,即$or的取反
db.persons.find({$nor: [{name:"张三"},{age:{$gt: 20}}]})
12、查找 userId > 1 and ( name='李四' or age = 23 ) 的用户,即 $and 和 $or 操作符的混合使用
db.persons.find({
userId : {$gt : 1},
$or : [{name : '李四'},{age : 23}]
});
db.persons.find({
$and : [{
userId : {$gt : 1},
$or : [{name : '李四'},{age : 23}]
}]
});
13、查找 name 不是李四 的人,使用 $not 操作符
db.persons.find({name:{$not: {$eq: "李四"}}});
db.persons.find({name:{$not: /^李四$/}})
注意:1、$not 作用在其它条件之上,用于取反操作
2、$not 用于查找不是这个值的数据,如果某个记录中没有$not查找的字段,该记录也会出来。
3、$not 不可作为顶级操作符,即find($not:{})这种形式
14、查找 age%5=0 的人,使用 $mod 操作符
db.persons.find({age:{$mod: [5, 0]}})
解释:表示查询出 age 和 5进行求模,余数为0 的记录。
15、查询 age in (20,30,25) 的人,使用 $in 操作符
db.persons.find({age:{$in: [20,30,25]}})
注意: 官网建议,当在同一个字段上进行查询时,应该使用$in操作符,而不是 $or 操作符,即能用 $in完成就不要使用$or完成。
16、查询 age not in (20,30,25) 的人,使用 $nin 操作符
db.persons.find({age:{$nin: [20,30,25]}})
17、$all 表示键需要匹配所有的值
* 查找 age = 20 && age = 25 的人,使用 $all 操作符
db.persons.find({age:{$all: [20,25]}})
* 查找 scores 同时存在 80 和 90 的人,使用 $all 操作符
db.persons.find({scores:{$all: [80,90]}})
注意:1、$all 一般用来匹配数组中的元素。
2、$all 匹配元素必须都要存在,和数组中的元素的顺序无关。
18、只查询 name 字段存在 && 值不为李四的记录,使用 $exists 操作符
db.persons.find({name:{$exists: true,$nin: ["李四"]}})
19、匹配 name=null 的情况,默认情况下会匹配出 name 不存在的记录
* 匹配 name=null 和 name不存在的情况
db.persons.find({name:null})
* 只匹配 name=null 的记录
db.persons.find({name:{$eq: null,$exists: true}})
20、正则表达式的使用,查找 name like '张%' 的记录,使用正则表达式
db.persons.find({name:/^张/})
21、查询总共有多少人。
db.persons.find({}).count()
三、数组的匹配
1、单个元素的匹配,格式 {key:valie} , 比如查询 scores 中存在 80 的元素
db.persons.find({scores:80})
2、多个元素的匹配,格式{key:{$all:[xxx,yyy]}},比如:查询 scores 中同时存在 80和90的元素,80和90在scores中的顺序无所谓,没有影响。
db.persons.find({scores:{$all: [80,90]}})
3、匹配数组中第几个角标对应的值是多少,比如:查询 scores中的第二个元素的值是 90
db.persons.find({"scores.1":90})
注意:数组角标是从 0 开始。
4、查询指定长度的数组,比如:查询 scores 数组的长度 =3 的数组
db.persons.find({"scores":{$size:3}})
5、返回数组中的子集,使用 $slice 操作符,正数表示返回前面多少条,负数表示返回后面多少条,区间表示跳过多少条和返回多少条,如下图所示:
6、查询数组中的某一个元素,要符合给定的查询条件,使用$elemMatch。比如:查询 name=张三 scores > 90 && scores < 90,结果如下图所示:
四、内嵌文档的查询:
1、查询 father.name=张三三 的文档
db.persons.find({"father.name":"张三三"})
2、内嵌文档的查询,和普通的文档查询是一样的。只是内嵌文档需要 写 "xxx.yyy" 需要加上双引号。
五、分页查询:
db.persons.find().skip(2).limit(2)
skip: 表示跳过多少条记录
limit: 表示需要返回多少条记录
六、排序操作
db.persons.find({}).sort({age:1})
注意:1、age : 1 表示根据 age 正序排序
2、age : -1 表示根据 age 倒序排序
3、如果需要多个字段排序,中间以逗号分隔即可。
mongodb的简单查询的更多相关文章
- 【第十一章】 springboot + mongodb(简单查询)
1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...
- 第十一章 springboot + mongodb(简单查询)
1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...
- 【第十二章】 springboot + mongodb(复杂查询)
简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...
- 第十二章 springboot + mongodb(复杂查询)
简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...
- java MongoDB查询(一)简单查询
前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id& ...
- 落网数据库简单查询接口 caddy+php7+mongodb
落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...
- Mongodb操作之查询(循序渐进对比SQL语句)
工具推荐:Robomongo,可自行百度寻找下载源,个人比较推荐这个工具,相比较mongoVUE则更加灵活. 集合简单查询方法 mongodb语法:db.collection.find() //co ...
- NOSQL -- Mongodb的简单操作与使用(wins)
NOSQL -- Mongodb的简单操作与使用(wins) 启动mongodb: 1.首先启动服务 dos命令下:net start Mongndb 也可以查询服务,手动开启服务: 完成后: 2.启 ...
- Linux系统下MongoDB的简单安装与基本操作
这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下 Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备 ...
随机推荐
- openswan中ISAKMP交互过程关键函数接口
1. ISAKMP交互过程中关键函数接口 下面分别说明不同的阶段和模式下的函数接口以及对应的报文. 2. 第一阶段(Phase I)主模式函数接口 发送端 响应端 main_outI1 主模式第一包 ...
- Apache配置与应用
目录: 一.基于域名的虚拟主机 二.基于IP地址的虚拟主机 三.基于端口的虚拟主机 四.Apache连接保持 五.构建Web虚拟目录与用户授权限制 六.Apache日志分割 七.AWStats 分析系 ...
- 如何在win10中Java中JDK的安装和path,classpath的环境配置
1,第一步,不用说肯定是去下一个java JDK了.目前最新版本的java JDK应该是JDK 7.0,这个就自己去百度一下了,好多网站都可以找到.2,第二步就是安装JDK虚拟机了,按照它里面的提示一 ...
- vue开发流程
在安装node.js 测试安装 在cmd 下输入node 如查能正确输出命令提示符,表明安装好node 测试安装npm -v 如果能成功出现版本信息表示安装好npm 安装配置 G码云 或 ...
- 深入xLua实现原理之Lua如何调用C#
xLua是腾讯的一个开源项目,为Unity. .Net. Mono等C#环境增加Lua脚本编程的能力.本文主要是探讨xLua下Lua调用C#的实现原理. Lua与C#数据通信机制 无论是Lua调用C# ...
- 痞子衡嵌入式:嵌入式Cortex-M中断向量表对齐原则的深入研究
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Cortex-M中断向量表对齐原则. 今天这篇文章的内容主要来自于五年前做 Kinetis K32W 系列双核启动时的发现,最近正好有同 ...
- win7任务计划提示”该任务映像已损坏或已篡改“
打开任务计划,弹出了下面的对话框[该任务映像已损坏或已篡改.(异常来自HRESULT:0x80041321)] 首先你以管理员的身份运行cmd命令,打开运行窗口 输入:chcp 437,并回车,回车后 ...
- CentOS7安装Docker遇到的问题笔记
笔记/朱季谦 以下是笔者本人学习搭建docker过程当中记录的一些实践笔记,过程当中也遇到了一些坑,但都解决了,就此记录,留作以后再次搭建时可以直接参考. 一.首先,先检查CentOS版本,保证在Ce ...
- Github新手入门
git入门项目:https://guides.github.com/activities/hello-world/ 创建存储库 创建一个分支 进行并提交更改 打开拉取请求 合并您的拉取请求
- Unity 刚体问题 解决相互作用力
在进行开发过程中,当两个都具有碰撞体和刚体的 游戏物体进行接触之后,或多或少都会出现相互作用力,对于体验有一定的影响. 需要在FixedUpdate(间隔固定的时间调用,不受游戏帧率的影响) 当中 ...