(一)查询文档

查询文档可以使用以下方法

# 以非结构化的方式显示所有的文档
db.<collectionName>.find(document) # 以结构化的方式显示所有文档
db.<collectionName>.find(document).pretty() # 只返回一个文档(结构化方式)
db.<collectionName>.findOne()

测试1 : 使用find()方法以非结构化的方式查询文档

> db.blog.find()
{ "_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"), "title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理", "Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html", "summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...", "tags" : [ "Linux", "study" ], "post" : "2020-05-13 23:17", "views" : 57, "comments" : [ { "user" : "user1", "message" : "mark!", "like" : 0 } ] }
{ "_id" : ObjectId("5ebd71b4c50e24a9d8fb2a7b"), "title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理", "Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html", "summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...", "tags" : [ "Linux", "study" ], "post" : "2020-05-13 23:17", "views" : 57, "comments" : [ { "user" : "user1", "message" : "mark!", "like" : 0 } ] }
{ "_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7c"), "title" : "如何为Linux服务器添加磁盘", "Link" : "https://www.cnblogs.com/lijiaman/p/12885028.html", "summary" : "Linux服务器如果磁盘不够用了,就需要增加新的磁盘,磁盘添加到使用通常有4个步骤...", "tags" : [ "Linux", "study" ], "post" : "2020-05-13 21:31", "views" : 25, "comments" : "" }
{ "_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7d"), "title" : "MySQL闪回工具--MyFlash", "Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html", "summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...", "tags" : [ "mysql", "study" ], "post" : "2020-04-24 21:38", "views" : 23, "comments" : "" }
>

测试2:使用pretty()方法以结构化的方式查询文档

> db.blog.find().pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
{
"_id" : ObjectId("5ebd71b4c50e24a9d8fb2a7b"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
{
"_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7c"),
"title" : "如何为Linux服务器添加磁盘",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885028.html",
"summary" : "Linux服务器如果磁盘不够用了,就需要增加新的磁盘,磁盘添加到使用通常有4个步骤...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 21:31",
"views" : 25,
"comments" : ""
}
{
"_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7d"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

测试3: 使用findOne()方法返回一个结构化文档

> db.blog.findOne()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
>

(二)MongoDB与RDBMS等效的where子句


操作 语法 例子 RDBMS等效例子
相等(=) {<key>:<value>} db.blog.find({title:"MySQL闪回工具--MyFlash"}) where title="MySQL闪回工具--MyFlash"
大于(>) {<key>:{$gt:<value>}} db.blog.find({views:{$gt:40}}) where views > 40
大于等于(>=) {<key>:{$gte:<value>}} db.blog.find({views:{$gte:57}}) where views>=57
小于(<) {<key>:{$lt:<value>}} db.blog.find({views:{$lt:25}}) where views<25
小于等于(<=) {<key>:{$lte:<value>}} db.blog.find({views:{$lte:25}}) where views<=25
不等于(<>) {<key>:{$ne:<value>}} db.blog.find({views:{$ne:25}}) where views!=25

例子1:查看blog集合中标题为“MySQL闪回工具--MyFlash”的文档

> db.blog.find({title:"MySQL闪回工具--MyFlash"}).pretty()
{
"_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7d"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

例子2 :查看blog集合中浏览次数大于40的文档

> db.blog.find({views:{$gt:40}}).pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
>

例子3 :查看blog集合中浏览次数大于等于57次的文档

> db.blog.find({views:{$gte:57}}).pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
>

例子4:查询blog集合中浏览次数小于25次的文档

> db.blog.find({views:{$lt:25}}).pretty()
{
"_id" : ObjectId("5ebe674278420c5d36520584"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

例子5:查询blog集合中浏览此时小于等于25次的文档

> db.blog.find({views:{$lte:25}}).pretty()
{
"_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7c"),
"title" : "如何为Linux服务器添加磁盘",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885028.html",
"summary" : "Linux服务器如果磁盘不够用了,就需要增加新的磁盘,磁盘添加到使用通常有4个步骤...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 21:31",
"views" : 25,
"comments" : ""
}
{
"_id" : ObjectId("5ebe674278420c5d36520584"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

例子6:查询blog集合中浏览次数不等于25次的文档

> db.blog.find({views:{$ne:25}}).pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
{
"_id" : ObjectId("5ebe674278420c5d36520584"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

(三)MongoDB中的AND操作

AND的语法:

db.<collectionName>.find(
{
$and:[
{key1:value1},{key2:value2}
]
}
).pretty()

例子 :查询blog集合中标题为“如何为Linux服务器添加磁盘”并且浏览次数大于20次的文档

> db.blog.find(
... {
... $and : [
... {title:"如何为Linux服务器添加磁盘"},
... {views:{$gt:20}}
... ]
... }
... ).pretty() {
"_id" : ObjectId("5ebd72d8c50e24a9d8fb2a7c"),
"title" : "如何为Linux服务器添加磁盘",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885028.html",
"summary" : "Linux服务器如果磁盘不够用了,就需要增加新的磁盘,磁盘添加到使用通常有4个步骤...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 21:31",
"views" : 25,
"comments" : ""
}
>

上面的查询相当于RDBMS中的:

select * from blog where title="如何为Linux服务器添加磁盘" and views>20;

(四)MongoDB中的or操作

OR的语法:

db.<collectionName>.find(
{
$or:[
{<key1>:<value1>},{<key2>:<value2>}
]
}
).pretty()

例子:查询blog集合中访问量在40以上或者是标题为“MySQL闪回工具--MyFlash”的文档

> db.blog.find(
... {
... $or : [
... {views:{$gt:40}},
... {title:"MySQL闪回工具--MyFlash"}
... ]
... }
... ).pretty() {
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
{
"_id" : ObjectId("5ebe674278420c5d36520584"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

上面的查询相当于RDBMS中的:

select * from blog where views>40 or title="MySQL闪回工具--MyFlash"

(五)MongoDB中的AND和OR结合在一起

例子:查看bolg集合中Link为"https://www.cnblogs.com/lijiaman/p/12770415.html"且浏览量大于40或者是标题为"MySQL闪回工具--MyFlash"的文档。

> db.blog.find(
... {
... Link : "https://www.cnblogs.com/lijiaman/p/12770415.html",
... $or : [{views:{$gt:40}},{title:"MySQL闪回工具--MyFlash"}]
... }
... ).pretty()
{
"_id" : ObjectId("5ebe674278420c5d36520584"),
"title" : "MySQL闪回工具--MyFlash",
"Link" : "https://www.cnblogs.com/lijiaman/p/12770415.html",
"summary" : "MyFlash介绍 MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的...",
"tags" : [
"mysql",
"study"
],
"post" : "2020-04-24 21:38",
"views" : 23,
"comments" : ""
}
>

上面的查询相当于RDBMS中的:

select *
from blog
where link='https://www.cnblogs.com/lijiaman/p/12770415.html'
and (views>40 or title='MySQL闪回工具--MyFlash')

(六)MongoDB中的嵌套查询

对于文档里面还包含文档的情况,可以使用嵌套查询,查询内部文档信息。

(6.1)匹配嵌套文档


例子:查询blog集合中comments字段等于{ "user" : "user1", "message" : "mark!", "like" : 0 }的文档

> db.blog.find({comments:{ "user" : "user1", "message" : "mark!", "like" : 0 }}).pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
>

(6.2)查询嵌套字段

父字段与子字段之间用“.”隔开

例子:查询blog表中comments字段中嵌套的字段user等于“user1”的文档

> db.blog.find({"comments.user":"user1"}).pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}
>

(6.3)嵌套查询指定AND条件

查询comments字段中user字段为“user1”,comments字段中like字段为0,views字段为57的文档。

> db.blog.find({"comments.user":"user1" , "comments.like":0,views:57}).pretty()
{
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}

或者可以直接使用$and来查询

> db.blog.find({
... $and : [
... {"comments.user":"user1"},
... {"comments.like":0},
... {views:57}
... ]
... }).pretty() {
"_id" : ObjectId("5ebd7133c50e24a9d8fb2a7a"),
"title" : "Linux 物理卷(PV)、逻辑卷(LV)、卷组(VG)管理",
"Link" : "https://www.cnblogs.com/lijiaman/p/12885649.html",
"summary" : "(一)相关概念逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备,如果要了解逻辑卷,那么首先...",
"tags" : [
"Linux",
"study"
],
"post" : "2020-05-13 23:17",
"views" : 57,
"comments" : [
{
"user" : "user1",
"message" : "mark!",
"like" : 0
}
]
}

【完】

MongoDB文档(二)--查询的更多相关文章

  1. MongoDB 文档的查询和插入操作

    MongoDB是文档型数据库,有一些专门的术语,和关系型DB相似,但也有差异,例如,Collection类似于关系型DB的Table,document类似于row,key/value pair类似于c ...

  2. MongoDB的学习--文档的查询

    继续关于<MongoDB权威指南>记录,今天的内容是文档的查询~~ MongoDB官网地址:http://www.mongodb.org/ 我使用的是MongoDB 2.4.8 find函 ...

  3. MongoDB(四):数据类型、插入文档、查询文档

    1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...

  4. mongodb内嵌文档的查询

    本文转自:http://blog.163.com/wm_at163/blog/static/1321734902012526103825481/ 1 > db.blog.findOne() { ...

  5. MongoDB文档的基本操作

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

  6. MongoDB自学------(3)MongoDB文档操作

    一.插入文档 二.查询文档 三.更新文档 可以看到标题(title)由原来的 "Mongodb" 更新为了 "MongoDBtest". 以上语句只会修改第一条 ...

  7. mongodb文档的CRUD

    本章会介绍对数据库移入或者移出数据的基本操作 向集合添加文档 从集合删除文档 更新现有的文档 为这些操作选择合适的安全级别 添加删除数据库 添加数据库 :use foo  如果存在foo 就use   ...

  8. mongoDB 文档概念

    mongoDB 文档概念 什么是文档 文档是 mongodb 基本的数据组织单元,类似于mysql 中的记录 文档由多个键值对组成,每个键值对表达一个数据项 属于 bson 数据 ps:  bson ...

  9. mongoDB 文档操作_删

    mongoDB 文档删除 MySQL对比 mysql delete from table where ... mongo db.collection.deleteOne(query) 删除函数 del ...

随机推荐

  1. 解决 appium 当中 uiautomator2 无法启动的问题

    在启动 appium 程序中,有时候会出现 uiautomator2 服务无法启动的错误,appium 的日志截图如下: image.png 错误信息: ActivityManager: Unable ...

  2. 集合框架之ArrayList -Java

    ArrayList 1.与数组的区别 如果要存放多个对象,可以使用数组,但是数组会有长度的限制,会出现不够用或者是浪费的情况. 为了解决数组的局限性引入了容器的概念,最常用的容器就是ArrayList ...

  3. 用Linux感觉低效吗?来看看这几个技巧!

      Linux已经成为目前最火的操作系统之一,尽管现在的Linux用户很多,但很多使用Linux的同学发现,他们在Linux下的工作效率并不高,那么这是为什么呢?其实使用Linux也可以很舒适,通过一 ...

  4. [PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)

    引言:项目过程当中碰到了类似流程这样的需求,对服务器上的文件进行依次操作,如:检查文件格式->检查文件是否有更新->处理更新->同步其他服务器等等 如果需求的操作是依赖于远程文件是否 ...

  5. BUUCTF Crypto_WP(2)

    BUUCTF Crypto WP 几道密码学wp [GXYCTF2019]CheckIn 知识点:Base64,rot47 下载文件后,发现一个txt文件,打开发现一串base64,界面之后出现一串乱 ...

  6. Android Studio常见对话框(普通对话框、单选对话框、多选对话框、进度条对话框、消息对话框、自定义对话框)

    Android Studio常见对话框(普通对话框.单选对话框.多选对话框.进度条对话框.消息对话框.自定义对话框) 1.普通对话框 2.单选对话框 3.多选对话框 4.进度条对话框 5.消息对话框 ...

  7. 学Linux驱动: 应该先了解驱动模型

    [导读] Linux设备林林总总,嵌入式开发一个绕不开的话题就是设备驱动开发,在做具体设备驱动开发之前,有必要对Linux设驱动模型有一个相对清晰的认识,将会帮助驱动开发,明白具体驱动接口操作符相应都 ...

  8. Java实现 蓝桥杯 算法提高 GPA(暴力)

    试题 算法提高 GPA 问题描述 输入A,B两人的学分获取情况,输出两人GPA之差. 输入格式 输入的第一行包含一个整数n表示A的课程数,以下n行每行Si,Ci分别表示第i个课程的学分与A的表现. G ...

  9. Java实现 蓝桥杯 算法训练 乘法次数

    乘法次数 资源限制 时间限制:1.0s 内存限制:999.4MB 问题描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:22=22(第一次乘),2 ...

  10. Java实现 LeetCode 207 课程表

    207. 课程表 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] ...