# 数据查询
# 2.1 查询语句
# 2.1.1 find() 语句
启动 MongoDB 服务,因为 MongoDB 并不随系统一起启动,可能以下命令运行后会等一小段的时间才会启动完毕。
sudo service mongodb start
进入 MongoDB 命令行操作界面,在命令行中敲 exit
可以退出。
mongo
find() 用法:db.COLLECTION_NAME.find()
> use post
> db.post.insert([
{
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'shiyanlou',
url: 'https://www.lanqiao.cn',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
title: 'NoSQL Database',
description: "NoSQL database doesn't have tables",
by: 'shiyanlou',
url: 'https://www.lanqiao.cn',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 20,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2013,11,10,2,35),
like: 0
}
]
}
])
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
查询数据,不加任何参数默认返回所有数据记录:
> db.post.find()
这条语句会返回 post 集合中的所有文档,实际应用中不常见,因为这样会导致大量的数据传输,造成服务器响应迟缓甚至失去响应。
# 2.1.2 pretty() 语句
pretty() 可以使查询输出的结果更美观。
> db.post.find().pretty()
例如:
> db.users.find()
{ "_id" : ObjectId("5c35657e6ee1e0307e215fc8"), "name" : "shiyanlou", "age" : "21" }
> db.users.find().pretty()
{
"_id" : ObjectId("5c35657e6ee1e0307e215fc8"),
"name" : "shiyanlou",
"age" : "21"
}
2
3
4
5
6
7
8
9
如果你想让 mongo shell 始终以 pretty 的方式显示返回数据,可以通过下面的指令实现:
echo "DBQuery.prototype._prettyShell = true" >> ~/.mongorc.js
这样就把默认的显示方式设置为 pretty 了。
> db.users.find()
{
"_id" : ObjectId("5c35657e6ee1e0307e215fc8"),
"name" : "bage",
"age" : "21"
}
2
3
4
5
6
# 2.2 MongoDB 中的 AND
MongoDB 不需要类似于其他数据库的 AND 运算符,当 find() 中传入多个键值对时,MongoDB 就会将其作为 AND 查询处理。
用法:db.mycol.find({ key1: value1, key2: value2 }).pretty()
> db.post.find({"by":"shiyanlou","to": "chenshi"}).pretty()
如上语句就可以查找出 by 字段为 'shiyanlou',to 字段为 'chenshi' 的所有记录,意思是找出系统中由 shiyanlou 发送给 chenshi 的所有邮件。
它对应的关系型 SQL 语句为:
SELECT * FROM post WHERE by = 'shiyanlou' AND to = 'chenshi'
# 2.3 MongoDB 中的 OR
# 2.3.1 OR
MongoDB 中,OR 查询语句以 $or
作为关键词,用法如下:
> db.post.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
2
3
4
5
6
7
操作示例:
> db.post.find({
$or:[
{"by":"shiyanlou"},
{"title": "MongoDB Overview"}
]
}).pretty()
2
3
4
5
6
它对应的关系型 SQL 语句为:
SELECT * FROM post WHERE by = 'shiyanlou' OR title = 'MongoDB Overview'
# 2.4 同时使用 AND 和 OR
操作范例:
> db.post.find({
"likes": {$gt:10},
$or: [
{"by": "shiyanlou"},
{"title": "MongoDB Overview"}
]
}).pretty()
2
3
4
5
6
7
{$gt:10}
表示大于 10,另外,$lt
表示小于、$gte
表示大于等于、$lte
表示小于等于、$ne
表示不等于。
如果这样的符号记起来稍微有点麻烦,可以根据它们的全写配合记忆:
gt
:大于 greater thanlt
:小于 less thangte
:大于或等于 greater than equallte
:小于或等于 less than equal
← 数据库和集合基本操作 文档基本操作 →