MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

比较操作:

操作

格式

等于

{<key>:<value>}

小于

{<key>:{$lt:<value>}}

小于或等于

{<key>:{$lte:<value>}}

大于

{<key>:{$gt:<value>}}

大于或等于

{<key>:{$gte:<value>}}

不等于

{<key>:{$ne:<value>}}

MongoDB AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。

语法格式如下:

>db.col.find({key1:value1, key2:value2})

MongoDB OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

>db.col.find(
   {
      $or: [
              {key1: value1}, {key2:value2}
      ]
   }
)
  1.    > db.person.find()
  2. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }
  3. { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
  4. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  5. > db.person.find(age:{$gt:5})
  6. 2017-06-01T21:12:33.114+0800 E QUERY??? SyntaxError: Unexpected token :
  7. > db.person.find({age:{$gt:5}})
  8. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }
  9. { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
  10. > db.person.find({age:2,name:'zzj'})
  11. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  12. > db.person.find({$or:[{age:2},{name:'xhj'}]})
  13. { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
  14. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }

MongoDB $type 操作符

描述

在本章节中,我们将继续讨论MongoDB中条件操作符 $type。

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

类型

数字

Double

1

String

2

Object

3

Array

4

Binary data

5

Undefined

6

Object id

7

Boolean

8

Date

9

Null

10

Regular Expression

11

JavaScript

13

Symbol

14

JavaScript (with scope)

15

32-bit integer

16

Timestamp

17

64-bit integer

18

Min key

255

Max key

127

  1. > db.person.insert({name:'my second child',age:'i do not know'})
  2. WriteResult({ "nInserted" : 1 })
  3. > db.person.find()
  4. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }
  5. { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
  6. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  7. { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
  8. > db.person.find({age:{$type:2}})
  9. { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }

MongoDB Limit() 方法

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

语法

limit()方法基本语法如下所示:

>db.COLLECTION_NAME.find().limit(NUMBER)

MongoDB Skip() 方法

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

语法

skip() 方法脚本语法格式如下:

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

实例

以上实例只会显示第二条文档数据

>db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
{ "title" : "Java 教程" }

MongoDB sort()方法

在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

语法

sort()方法基本语法如下所示:

>db.COLLECTION_NAME.find().sort({KEY:1})

MongoDB findOne()方法

与find不一样的是,只查询出一条数据就停止查询了。

$all匹配所有

  1. > db.data.save({x:[1,2]})
  2. WriteResult({ "nInserted" : 1 })
  3. > db.data.save({x:[1,2,3]})
  4. WriteResult({ "nInserted" : 1 })
  5. > db.data.save({x:[2,3]})
  6. WriteResult({ "nInserted" : 1 })
  7. > db.data.find();
  8. { "_id" : ObjectId("593177646a6bb0f03293efe1"), "x" : 0 }
  9. { "_id" : ObjectId("593177646a6bb0f03293efe2"), "x" : 1 }
  10. { "_id" : ObjectId("593177646a6bb0f03293efe3"), "x" : 2 }
  11. { "_id" : ObjectId("593177646a6bb0f03293efe4"), "x" : 3 }
  12. { "_id" : ObjectId("593177646a6bb0f03293efe5"), "x" : 4 }
  13. { "_id" : ObjectId("593177646a6bb0f03293efe6"), "x" : 5 }
  14. { "_id" : ObjectId("593177646a6bb0f03293efe7"), "x" : 6 }
  15. { "_id" : ObjectId("593177646a6bb0f03293efe8"), "x" : 7 }
  16. { "_id" : ObjectId("593177646a6bb0f03293efe9"), "x" : 8 }
  17. { "_id" : ObjectId("593177646a6bb0f03293efea"), "x" : 9 }
  18. { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
  19. { "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }
  20. { "_id" : ObjectId("59317e786a6bb0f03293efed"), "x" : [ 2, 3 ] }
  21. > db.data.find({x:[1,2]});
  22. { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
  23. > db.data.find({x:{$all:[1,2]}});
  24. { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
  25. { "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }

$exists 某一列是否有存在

与是否为空不一样 如果某一列存在的值是null 那么他是存在但是为空的。

  1.   > db.data.save({x:1,y:2});
  2. WriteResult({ "nInserted" : 1 })
  3. > db.data.find({y:{$exists:ture}})
  4. 2017-06-02T23:07:01.390+0800 E QUERY ReferenceError: ture is not defined
  5.     at (shell):1:26
  6. > db.data.find({y:{$exists:true}})
  7. { "_id" : ObjectId("59317efe6a6bb0f03293efee"), "x" : 1, "y" : 2 }
  8. > db.data.save({x:1,y:null});
  9. WriteResult({ "nInserted" : 1 })
  10. > db.data.find({y:{$exists:true}})
  11. { "_id" : ObjectId("59317efe6a6bb0f03293efee"), "x" : 1, "y" : 2 }
  12. { "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }

$in 和判断是否为空

查询是否为空会把不存在的也查询出来 所以有时候要结合$exists一起来查询

> db.data.find({y:null});

{ "_id" : ObjectId("593177646a6bb0f03293efe1"), "x" : 0 }

{ "_id" : ObjectId("593177646a6bb0f03293efe2"), "x" : 1 }

{ "_id" : ObjectId("593177646a6bb0f03293efe3"), "x" : 2 }

{ "_id" : ObjectId("593177646a6bb0f03293efe4"), "x" : 3 }

{ "_id" : ObjectId("593177646a6bb0f03293efe5"), "x" : 4 }

{ "_id" : ObjectId("593177646a6bb0f03293efe6"), "x" : 5 }

{ "_id" : ObjectId("593177646a6bb0f03293efe7"), "x" : 6 }

{ "_id" : ObjectId("593177646a6bb0f03293efe8"), "x" : 7 }

{ "_id" : ObjectId("593177646a6bb0f03293efe9"), "x" : 8 }

{ "_id" : ObjectId("593177646a6bb0f03293efea"), "x" : 9 }

{ "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }

{ "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }

{ "_id" : ObjectId("59317e786a6bb0f03293efed"), "x" : [ 2, 3 ] }

{ "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }

> db.data.find({y:{$in:null,$exists:true}});

Error: error: {

"$err" : "Can't canonicalize query: BadValue $in needs an array",

"code" : 17287

}

> db.data.find({y:{$in:[null],$exists:true}});

{ "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }

$ne:不等于

$nin:no in

$mod:取模运算

  1. > db.data.find({x:{$mod:[3,1]}});
  2. { "_id" : ObjectId("593177646a6bb0f03293efe2"), "x" : 1 }
  3. { "_id" : ObjectId("593177646a6bb0f03293efe5"), "x" : 4 }
  4. { "_id" : ObjectId("593177646a6bb0f03293efe8"), "x" : 7 }
  5. { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
  6. { "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }
  7. { "_id" : ObjectId("59317efe6a6bb0f03293efee"), "x" : 1, "y" : 2 }
  8. { "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }

$size 数组元素个数

$not 非

正则表达式支持:

  1. > db.person.find();
  2. { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 30, "address" : DBRef("address", ObjectId("59314b07e693aae7a5eb72ab")) }
  3. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  4. { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
  5. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
  6. > db.person.find({name:/z/});
  7. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  8. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
  9. > db.person.find({name:/^z/});
  10. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  11. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
  12. > db.person.find({name:/^z..$/});
  13. { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
  14. { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
  15. > db.person.find({name:{$not:/^z..$/}});
  16. { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 30, "address" : DBRef("address", ObjectId("59314b07e693aae7a5eb72ab")) }
  17. { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
  18. >

嵌入文档上的查询:

精确匹配:db.users.find( { favorites: { artist: "Picasso", food: "pizza" } } )

匹配嵌入文档的属性:db.users.find( { "favorites.artist": "Picasso" } )

数组查询

精确匹配:db.users.find( { badges: [ "blue", "black" ] } )

匹配包含一个数组元素:db.users.find( { badges: "black" } )

匹配指定元素:db.users.find( { "badges.0": "black" } )

内嵌文档数组:

匹配书第一个使用者的的年龄小于等于55的书:db.book.find( { 'users.0.age': { $lte: 55 } } )
匹配书使用者中包含至少一个的年龄小于等于55的书:db.book.find( { 'users.age': { $lte: 55 } } )
匹配书使用者中包含至少一个的年龄小于等于55并且为男性的书:db.book.find( { users: { $elemMatch: { age: { $lte: 55 }, sex: 'man' } } } )
匹配书使用者中包含至少一个的年龄小于等于55并且包含至少一个使用者为男性的书:db.book.find( { "users.age": { $lte: 55 }, "users.sex": 'man' } )
匹配书使用者中有3个的书:db.book.find( { 'users': { $size:3 } } ) 注意$size只支持等值查询

限制返回的列:

db.person.find(age:{$gt:5},{age:1,name:1})

返回_id,name,age列。

db.person.find(age:{$gt:5},{age:1,name:1,address:{$slice:10}})

返回_id,name,age列,address列(这里假设它为数组)只返回前10条。

db.person.find(age:{$gt:5},{age:1,name:1,address:{$slice:-10}})

返回_id,name,age列,address列(这里假设它为数组)只返回最后10条。

db.person.find(age:{$gt:5},{age:1,name:1,address:{$slice:[20,10]}})

返回_id,name,age列,address列(这里假设它为数组)只返回 从第20条开始之后的10条。

 

正则表达式查询:

db.person.find({'name':/zjf|xhj/i})

Mongodb文档查询的更多相关文章

  1. SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  2. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  3. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  4. MongoDB入门---文档查询操作之条件查询&and查询&or查询

    经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...

  5. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  6. MongoDB文档(二)--查询

    (一)查询文档 查询文档可以使用以下方法 # 以非结构化的方式显示所有的文档 db.<collectionName>.find(document) # 以结构化的方式显示所有文档 db.& ...

  7. MongoDB文档的基本操作

    1. MongoDB的安装方法 (1)下载MongoDB 相应的版本: (2)设置数据文件和日志文件的存放目录: (3)启动MongoDB服务: (4)将MongoDB作为服务启动. 2. Mongo ...

  8. Elasticsearch增删改查 之 —— mget多文档查询

    之前说过了针对单一文档的增删改查,基本也算是达到了一个基本数据库的功能.本篇主要描述的是多文档的查询,通过这个查询语法,可以根据多个文档的查询条件,返回多个文档集合. 更多内容可以参考我整理的ELK文 ...

  9. ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

随机推荐

  1. java中instanceof的基本使用

    java中的instanceof运算符是用于判断对象是否是指定类或这个指定类的子类的一个实例,返回值是布尔类型. 语法: boolean result = object instanceof clas ...

  2. 基于nodeJS的小说爬虫实战

    背景与需求分析 最近迷恋于王者荣耀.斗鱼直播与B站吃播视频,中毒太深,下班之后无心看书. 为了摆脱现状,能习惯看书,我开始看小说了,然而小说网站广告多而烦,屌丝心态不愿充钱,于是想到了爬虫. 功能分析 ...

  3. RN 图片处理 resizeMode

    Image组件必须在样式中声明图片的宽和高.如果没有声明,则图片将不会被呈现在界面上.    我们一般将Image定义的宽和高乘以当前运行环境的像素密度称为Image的实际宽高. 当Image的实际宽 ...

  4. Python爬虫学习==>第九章:正则表达式基础

    学习目的: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特点字符.及这些特点字符组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正式步骤 Step1 ...

  5. CornerNet 算法笔记

    论文名称:CornerNet: Detecting Objects as Paired Keypoints 论文链接:https://arxiv.org/abs/1808.01244 代码链接:htt ...

  6. DNS简单搭建

    一.安装服务 设置主机名 [root@localhost named]# hostnamectl set-hostname k1.kk.cn [root@localhost named]# bash ...

  7. Docker管理面板-URLOS(易用、高效、强大)

    一.介绍 URLOS是一个Docker管理面板,它把服务器端软件应用的安装行为简化到极致,堪称服务器端的应用宝,具有集群管理.自动故障转移.自动负载均衡等高级功能,可轻易搭建7*24小时在线的网站运行 ...

  8. MessageBox显示位置

    假设存在2个窗口类CImDlg与CChatDlg,如果希望MessageBox跟随CChatDlg,方法是 CChatDlg *pDlg = xxx; pDlg->MessageBox();

  9. 学习shell的第二天

    重定向和管道符: 1.重定向 程序 = 指令 + 数据            命令    变量  在程序中,数据如何输入?又如何输出?  数据输入:键盘  --  标准输入,但是并不是唯一输入方式:  ...

  10. [转帖]一张图让你看懂InnoDB

    一张图让你看懂InnoDB 2018年05月10日 10:02:34 灵魂自由的忙人 阅读数 299 https://blog.csdn.net/xiaoyi23000/article/details ...