此篇文章简单的记录一下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=nullname不存在的情况

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的简单查询的更多相关文章

  1. 【第十一章】 springboot + mongodb(简单查询)

    1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...

  2. 第十一章 springboot + mongodb(简单查询)

    1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...

  3. 【第十二章】 springboot + mongodb(复杂查询)

    简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...

  4. 第十二章 springboot + mongodb(复杂查询)

    简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...

  5. java MongoDB查询(一)简单查询

    前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id& ...

  6. 落网数据库简单查询接口 caddy+php7+mongodb

    落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...

  7. Mongodb操作之查询(循序渐进对比SQL语句)

    工具推荐:Robomongo,可自行百度寻找下载源,个人比较推荐这个工具,相比较mongoVUE则更加灵活. 集合简单查询方法 mongodb语法:db.collection.find()  //co ...

  8. NOSQL -- Mongodb的简单操作与使用(wins)

    NOSQL -- Mongodb的简单操作与使用(wins) 启动mongodb: 1.首先启动服务 dos命令下:net start Mongndb 也可以查询服务,手动开启服务: 完成后: 2.启 ...

  9. Linux系统下MongoDB的简单安装与基本操作

    这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下   Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备 ...

随机推荐

  1. C# Dapper基本三层架构使用 (三、BLL)

    BLL层介绍 业务逻辑层用于做一些有效性验证的工作,以更好的保证程序运行的健壮性.如完成数据添加.修改和查询业务等:不允许指定的文本框中输入空字符串,数据格式是否正确以及数据类型验证:用户权限的合法性 ...

  2. 用python的pandas读取excel文件中的数据

    一.读取Excel文件   使用pandas的read_excel()方法,可通过文件路径直接读取.注意到,在一个excel文件中有多个sheet,因此,对excel文件的读取实际上是读取指定文件.并 ...

  3. 深度学习——前向传播算法和反向传播算法(BP算法)及其推导

    1 BP算法的推导 图1 一个简单的三层神经网络 图1所示是一个简单的三层(两个隐藏层,一个输出层)神经网络结构,假设我们使用这个神经网络来解决二分类问题,我们给这个网络一个输入样本,通过前向运算得到 ...

  4. scrum项目冲刺_day05总结

    摘要:今日完成任务. 1.语音识别完成 2.搜索功能实现了从数据库中的查询 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索 ...

  5. Django学习day05随堂笔记

    每日测验 """ 今日考题 1.反向解析的本质是什么,无名和有名反向解析如何操作? 2..路由分发能够实现的前提是什么,需要注意什么,名称空间什么时候使用 3..什么是虚 ...

  6. 概述 .NET 6 ThreadPool 实现

    目录 前言 任务的调度 基本调度单元 IThreadPoolWorkItem 实现类的实例. Task 全局队列 本地队列 偷窃机制 Worker Thread 的生命周期管理 线程生命注入实验 .N ...

  7. 关于PHP的方法参数类型约束

    在之前的文章PHP方法参数的那点事儿中,我们讲过关于PHP方法参数的一些小技巧.今天,我们带来的是更加深入的研究一下PHP中方法的参数类型. 在PHP5之后,PHP正式引入了方法参数类型约束.也就是如 ...

  8. 解决IE浏览器 点击子元素重复调用执行 mouseover 与mouseout兼容性问题

    将函数配对换为下面2个就可以解决兼容性问题. mouseenter() mouseleave(0

  9. ECSHOP任意页面显示指定分类、数量、排序的任意类型文章,包括只显示置顶or普通的文章

    1.在需要使用此功能的PHP页面里最后的?>前面添加以下代码,现在以article.php为例子 /** jinmozhe 专业ECSHOP二次开发 * 获得指定分类ID.文章类型.指定数量.排 ...

  10. stmt.executeQuery不执行解决办法

    感谢博主分享:https://blog.csdn.net/lxmky/article/details/4705698 今天在Eclipse下编写jsp网页时,出现一个问题,主要是stmt.execut ...