数据库的操作
创建数据库
MongoDB 创建数据库的语法格式如下:
1 | use DATABASE_NAME |
如果数据库不存在,则创建数据库,否则切换到指定数据库.
实例
以下实例我们创建了数据库 runoob
1 | > use runoob |
如果想查看所有的数据库,可以使用 show dbs
命令
1 | > show dbs |
可以看到,我们刚创建的数据库 runoob
并不在数据库 的列表中,要显示它,我们需要向 runoob
数据库中插入一些数据。
1 | > db.runoob.insert({"name": "菜鸟教程"}) |
MongoDB 中默认的数据库为 test
,如果你没有创建新的数据库,集合将存放在 test
数据库中。
注意:在 MongoDB 中,集合只有在内容插入后才会创建!就是说,创建集合(数据表)后,要再插入一个文档(记录),集合才会被真正创建。
删除数据库
MongoDB 删除数据库的语法格式如下:
1 | db.dropDatabase() |
删除当前数据库,默认为 test
,你可以使用 db
命令查看当前数据库名
实例
以下实例我们删除了数据库 runoob
首先查看所有的数据库:
1 | > show dbs |
接下来我们切换到数据库 runoob
1 | > use runoob |
执行删除命令
1 | > db.dropDatabase() |
最后,我们再通过 show dbs
命令查看数据库是否删除成功
1 | > show dbs |
集合的操作
创建集合
MongoDB 中使用 createCollection()
方法来创建集合。
语法格式如下:
1 | db.createCollection(name, options) |
参数说明:
- name:要创建的集合名称
- options:可选参数,指定有关内存大小及索引的选项
options 可以是如下参数:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
在插入文档时,MongoDB 首先检查固定集合的 size
字段,然后检查 max
字段。
实例
在 test 数据库中创建 runoob
集合
1 | > use test |
如果要查看已有集合,可以使用 show collections
或 show tables
命令
1 | > show collections |
下面是带有几个关键参数的 createCollection()
的用法
创建固定集合 mycol,整个集合空间大小为 6142800kb,文档最大数为 10000 个。
1
2
3
4
5> db.createCollection('mycol', {capped: true, autoIndexId: true, size: 6142800, max: 10000})
{
"note" : "the autoIndexId option is deprecated and will be removed in a future release",
"ok" : 1
}“note” : “the autoIndexId option is deprecated and will be removed in a future release”。官方不赞成给_id创建索引,以后发布的版本会将这个移除
在 MongoDB 中,你不需要创建集合,当你插入一些文档时,MongoDB 会自动创建集合。
1
2
3
4
5
6> db.mycol2.insert({"name": "菜鸟教程"})
WriteResult({ "nInserted" : 1 })
> show tables
mycol
mycol2
runoob
删除集合
MongoDB 中使用 drop()
方法来删除集合
语法格式如下:
1 | db.collection.drop() |
返回值:如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false
实例
在数据库 mydb 中,我们可以先通过 show collections
命令查看已存在的集合
1 | > use mydb |
接着删除集合 mycol2
1 | > db.mycol2.drop() |
通过 show collections 再次查看数据库 mydb 中的集合
1 | > show collections |
文档的操作
文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
插入文档
MongoDB 使用 insert()
或 save()
方法向集合中插入文档,语法如下:
1 | db.COLLECTION_NAME.insert(document) |
实例
以下文档可以存储在 MongoDB 的 runoob 数据库的 col 集合中:
1
2
3
4
5
6
7
8> db.col.insert({title: "MongoDB 教程",
description: "MongoDB 是一个 NoSQL 数据库",
by: "菜鸟教程",
url: "https://www.runoob.com",
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
WriteResult({ "nInserted" : 1 })以上实例中 col 是我们的集合名,如果该集合不在该数据库中,MongoDB 会自动创建该集合并插入文档。
查看已插入的文档
1
2> db.col.find()
{ "_id" : ObjectId("5e79b17f5735b722101094a3"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 NoSQL 数据库", "by" : "菜鸟教程", "url" : "https://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
我们也可以将数据定义为一个变量,如下所示:
1 | > document = ({title: "MongoDB 教程", |
执行后显示结果如下:
1 | { |
执行插入操作:
1 | > db.col.insert(document) |
插入文档也可以使用
db.col.save(document)
命令。如果不指定_id
字段,save()
方法类似于insert()
方法。如果指定_id
字段,则该方法会更新该_id
的数据。
更新文档
MongoDB 使用 update()
和 save()
方法老更新集合中的文档。
update() 方法
update() 方法用于更新已存在的文档。语法格式如下:
1 | db.collection.update( |
参数说明
- query: update 的查询条件,类似 SQL update 查询内 where 后面的。
- update: update 的对象和一些更新的操作符(如$,$inc…)等,也可以理解为 SQL update 查询内 set 后面的。
- upsert: 可选,这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true 为插入,默认是 false。不插入。
- multi: 可选,MongoDB 默认是 false,只更新找到的第一条记录,如果这个参数为 true,就把按条件查出来的多条记录全部更新。
- writeConcern: 可选,抛出异常的级别。
实例
- 我们在集合
col
中插入如下数据1
2
3
4
5
6
7
8> db.col.insert({
title: "MongoDB 教程",
description: "MongoDB 是一个 NoSQL 数据库",
by: "菜鸟教程",
url: "https://www.runoob.com",
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
接着我们通过 update()
方法来更新标题 (title):
1 | > db.col.update({'title': "MongoDB 教程"}, {$set: {'title': 'MongoDB'}}) |
可以看到标题(title) 由原来的 “MongoDB 教程” 更新为了 “MongoDB”.
以上语句只会修改第一条发现的文档,如果你想修改多条相同的文档,则需要设置 multi
参数为 true
1 | > db.col.update({'title': "MongoDB 教程"}, {$set: {'title': 'MongoDB'}}, {multi: true}) |
save() 方法
save()
方法通过传入的文档来替换已有文档。语法格式如下:
1 | db.collection.save( |
参数说明:
- document: 文档数据
- writeConcern: 可选,抛出异常的级别
实例
以下实例中我们替换了 _id 为 5e79b17f5735b722101094a3 的文档数据:
1 | > db.col.save({ |
替换成功后,我们可以通过 find()
命令来查看替换后的数据
1 | > db.col.find().pretty() |
更多实例
只更新第一条记录:
1
db.col.update({"count": {$gt:1}}, {$set: {"test2": "OK"}});
全部更新
1
db.col.update({"count": {$gt:3}}, {$set: {"test2": "OK"}}, false, true);
只添加第一条
1
db.col.update({"count": {$gt:4}}, {$set: {"test5": "OK"}}, true, false);
全部添加
1
db.col.update({"count": {$gt:5}}, {$set: {"test5": "OK"}}, true, true);
全部更新
1
db.col.update({"count": {$gt:15}}, {$inc: {"count": 1}}, false, true);
只更新第一条记录
1
db.col.update({"count": {$gt: 10}}, {$inc: {"count": 1}}, false, false);
删除文档
MongoDB 的 remove()
函数是用来删除集合中的数据。
MongoDB 数据更新可以使用 update()
函数。在执行 remove()
函数前先执行 find()
命令来判断执行的条件是否正确,这是一个较好的习惯。
remove()
方法的基本语法格式如下:
1 | db.collection.remove( |
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
1 | db.collection.remove( |
参数说明:
- query: 可选,删除文档的条件
- justOne: 可选,如果设置为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern:可选,抛出异常的级别
实例
以下的文档我们执行两次插入操作
1 | db.col.insert({ |
使用 find()
函数查找数据
1 | > db.col.find() |
接下来我们移除title 为 ‘MongoDB 教程’ 的文档
1 | > db.col.remove({'title': 'MongoDB 教程'}) |
如果你只想删除第一条找到的记录可以设置 justOne
为1
,如下所示:
1 | > db.col.remove({'title': 'MongoDB 教程'}, 1) |
如果想删除所有的数据,可以使用下面的方式(类似常规 SQL 的 truncate 命令)
1 | > db.col.remove({}) |