MongoDB

数据库操作

  • 查看所有数据库
1
show dbs
  • 创建数据库
1
2
use 库名
含义为如果数据库不存在,则创建数据库,否则切换到指定数据库。
  • 显示当前库
1
db
  • 删除当前库
1
db.dropDatabase()

集合

  • 创建集合
1
2
3
4
5
6
7
8
db.createCollection(name, options)

name: 要创建的集合名称;options: 可选参数, 指定有关内存大小及索引的选项。

capped 布尔 (可选)如果为true,则创建有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。此时,必须指定size参数。
autoIndexId 布尔 (可选)如为true,自动在_id字段创建索引。默认为false。
size 数值 (可选)为固定集合指定一个最大值,以千字节计(KB)。如果capped为true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。
1
2
创建固定集合mycol,整个集合空间大小6142800KB, 文档最大个数为10000个。
db.createCollection("mycol", {capped:true, autoIndexId:true, size:6142800, max:10000})
  • 删除集合
1
2
db.集合名.drop()
如果成功删除选定集合,则drop()方法返回true,否则返回false
  • 显示所有集合
1
show collections

文档

  • 插入文档
1
2
3
4
5
6
7
8
9
10
db.集合名.insert(document)

db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
如果集合col不存在,则插入文档时自动创建集合。
1
2
3
4
5
6
7
8
9
document=({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});

db.col.insert(document)
  • 更新文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
save() 方法通过传入的文档来替换已有文档。

db.collection.save(
<document>,
{
writeConcern: <document>
}
)

以下实例中我们替换了_id为56064f89ade2f21f36b03136的文档数据:
db.col.save({
"_id" : ObjectId("5d9d34ed5ff1cc98126fd190"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
  • 删除文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

query:(可选)删除的文档的条件。
justOne:(可选)如果设为true或1,则只删除一个文档,如果不设置该参数,或使用默认值false,则删除所有匹配条件的文档。
writeConcern:(可选)抛出异常的级别。

db.col.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 }) # 删除了两条数据

db.col.remove({}) 删除所有数据
  • 查找文档
1
2
3
4
5
6
7
db.collection.find(query, projection)
query:可选,使用查询操作符指定查询条件
projection:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下:
db.col.find().pretty()
pretty()方法以格式化的方式来显示所有文档。
1
2
3
4
5
6
等于	    {<key>:<value>}	        db.col.find({"by":"菜鸟教程"}).pretty()	    where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
1
2
3
4
5
6
7
8
9
10
MongoDB的find()方法可以传入多个键(key),每个键(key)以逗号隔开,即常规SQL的AND条件。
语法格式如下:
db.col.find({key1:value1, key2:value2}).pretty()
db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()

or条件
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

AND和OR联合使用,类似常规SQL语句为:'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

操作符

  • $type操作符
1
2
3
db.col.find({"title" : {$type : 2}})

db.col.find({"title" : {$type : 'string'}})
  • $set操作符

替换掉指定字段的值

1
{ $set: { <field1>: <value1>, ... } }
  • $inc操作符

可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。

1
2
3
4
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1","size" : 11 }
db.b.update({"uid" : "201203"},{"$inc":{"size" : 2}})
db.b.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1","size" : 13 }
  • $unset

从字面就可以看出其意义,主要是用来删除键。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"_id" : ObjectId("500216de81b954b6161a7d8f"),
"desc" : "hello world2!",
"num" : 40,
"size" : 10,
"type" : "3",
"uid" : "20120002"
}
db.a.update({"uid" : "20120002","type" : "3"},{"$unset":{"num":0}})
db.a.findOne({"uid" : "20120002","type" : "3"})
{
"_id" : ObjectId("500216de81b954b6161a7d8f"),
"desc" : "hello world2!",
"size" : 10,
"type" : "3",
"uid" : "20120002"
}