首先启动数据库,控制台输入 mongo
进入数据库命令窗口。
创建数据库
MongoDB use DATABASE_NAME
用于创建数据库。该命令如果数据库不存在,将创建一个新的数据库, 否则将返回现有的数据库。
语法:
use DATABASE语句的基本语法如下:
1 | > use DATABASE_NAME |
例子:
如果想创建一个数据库名称为 <mydb>
, 那么 use DATABASE
语句应该如下:1
2> use mydb
switched to db mydb
要检查当前选择的数据库使用命令 db
1 | > db |
如果想查询数据库列表,那么使用命令 show dbs
.
1 | > show dbs |
所创建的数据库(mydb)不存在于列表中。要显示的数据库,需要至少插入一个文档进去。
1 | > db.movie.insert({"name":"yiibai tutorials"}) |
MongoDB的默认数据库是test。 如果没有创建任何数据库,那么集合将被保存在测试数据库。
删除数据库
MongoDB db.dropDatabase()
命令用于删除现有的数据库。
语法
dropDatabase()指令的基本语法如下:
1 | db.dropDatabase() |
这将删除选定的数据库。如果没有选择任何数据库,那么它会删除默认的“test”数据库
例子:
如果想删除新的数据库 <mydb>
, 那么 dropDatabase()
命令将如下所示:
1 | >use mydb |
创建集合
MongoDB 的 db.createCollection(name, options)
用于创建集合。 在命令中, name
是要创建集合的名称。 Options
是一个文档,用于指定集合的配置。
参数 | 类型 | 描述 |
---|---|---|
Name | String | 要创建的集合的名称 |
Options | Document(可选) | 指定有关内存大小和索引选项 |
选项参数是可选的,所以需要指定集合的唯一名字。
语法
createCollection()方法的基本语法如下
1 | >use test |
可以通过使用 show collections
命令来检查创建的集合1
2
3>show collections
mycollection
system.indexes
选项列表
字段 | 类型 | 描述 |
---|---|---|
capped | Boolean(可选) | 如果为true,它启用上限集合。上限集合是一个固定大小的集合,当它达到其最大尺寸会自动覆盖最老的条目。 如果指定true,则还需要指定参数的大小。 |
autoIndexID | Boolean(可选) | 如果为true,自动创建索引_id字段。默认的值是 false. |
size | number(可选) | 指定的上限集合字节的最大尺寸。如果capped 是true,那么还需要指定这个字段。 |
max | number(可选) | 指定上限集合允许的最大文件数。尽管插入文档,MongoDB首先检查字段集合的上限大小,那么它会检查最大字段。 |
语法 :
1 | >db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } ) |
在MongoDB中并不需要创建集合。 当插入一些文档 MongoDB 会自动创建集合。
1 | >db.yiibai.insert({"name" : "yiibai"}) |
删除集合
MongoDB 的 db.collection.drop()
用于从数据库中删除集合。
语法
drop()
命令的基本语法如下1
db.COLLECTION_NAME.drop()
例子:
下面给出的例子将删除给定名称的集合:mycollection1
2
3
4>use mydb
switched to db mydb
>db.mycollection.drop()
true
插入文档
将数据插入到MongoDB集合,需要使用MongoDB 的 insert()
方法。
语法
insert()命令的基本语法如下:1
2
3
4
5
6
7
8
9
10
11>db.COLLECTION_NAME.insert(document)
例子
>db.mycol.insert({
_id: ObjectId(7df78ad8902c),
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
这里 mycol 是我们的集合名称,它是在之前的教程中创建。如果集合不存在于数据库中,那么MongoDB创建此集合,然后插入文档进去。
在如果我们不指定_id
参数插入的文档,那么 MongoDB 将为文档分配一个唯一的ObjectId
。
_id
是12个字节十六进制数在一个集合的每个文档是唯一的。 12个字节被划分如下:
1 | _id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer) |
要以单个查询插入多个文档,可以通过文档 insert() 命令的数组方式。
例子
1 | >db.post.insert([ |
查询文档
要从集合查询MongoDB数据,需要使用MongoDB的 find()
方法。
语法
find()方法的基本语法如下1
>db.COLLECTION_NAME.find()
find()
方法将在非结构化的方式显示所有的文件。 如果显示结果是格式化的,那么可以用pretty()
方法。
语法
1 | >db.mycol.find().pretty() |
####例子
1 | >db.mycol.find().pretty() |
除了find()
方法还有findOne()
方法,仅返回一个文档。
RDBMS Where子句等效于MongoDB
查询文档在一些条件的基础上,可以使用下面的操作
操作 | 语法 | 示例 | RDBMS等效语句 |
---|---|---|---|
Equality | {<key>:<value>} |
db.mycol.find({“by”:”yiibai tutorials”}).pretty() | where by = ‘yiibai tutorials’ |
Less Than | {<key>:{$lt:<value>}} |
db.mycol.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
Less Than Equals | {<key>:{$lte:<value>}} |
db.mycol.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
Greater Than | {<key>:{$gt:<value>}} |
db.mycol.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
Greater Than Equals | {<key>:{$gte:<value>}} |
db.mycol.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
Not Equals | {<key>:{$ne:<value>}} |
db.mycol.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
AND 在 MongoDB 语法
在 find()
方法,如果您传递多个键通过”,”将它们分开,那么MongoDB对待它就如 AND
条件一样。基本语法如下所示:1
>db.mycol.find({key1:value1, key2:value2}).pretty()
例子
下面给出的例子将显示所有教程含“yiibai tutorials”和其标题是“MongoDB Overview”
1 | >db.mycol.find({"by":"yiibai tutorials","title": "MongoDB Overview"}).pretty() |
对于上面给出的例子相当于where
子句:where by='yiibai tutorials' AND title='MongoDB Overview'
。可以传递任何数目的键-值对在find子句。
OR 在 MongoDB 语法
要查询基于OR条件的文件,需要使用$or关键字。OR的基本语法如下所示:1
2
3
4
5
6
7>db.mycol.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
例子
下面给出的例子将显示所有撰写含有 ‘yiibai tutorials’ 或是标题为 ‘MongoDB Overview’ 的教程
1 | >db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty() |
使用 AND 和 OR 在一起 例子
下面给出的例子显示有喜欢数大于100 的文档,其标题要么是 ‘MongoDB Overview’ 或 ‘yiibai tutorials’. 等效于SQL的where子句:where likes>10 AND (by = 'yiibai tutorials' OR title = 'MongoDB Overview')
1 | >db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai tutorials"}, {"title": "MongoDB Overview"}] }).pretty() |
更新文档
MongoDB的update()
和save()
方法用于更新文档到一个集合。 update()方法将现有的文档中的值更新,而save()方法使用传递到save()方法的文档替换现有的文档。
MongoDB Update() 方法 语法
update()方法的基本语法如下
1 | >db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA) |
例子
考虑mycol集合有如下数据。1
2
3{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Yiibai Overview"}
下面的例子将设置其标题“MongoDB Overview”的文件为新标题为“New MongoDB Tutorial”1
2
3
4
5>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Tutorial Overview"}
默认情况下,MongoDB将只更新单一文件,更新多,需要一个参数 ‘multi’ 设置为 true。1
>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},{multi:true})
MongoDB Save() 方法
save() 取代方法,通过 save()方法取代新文档
语法
mongodb 的 save()方法如下所示的基本语法:1
2>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
例子
下面的例子将替换该文件_id '5983548781331adf45ec7'
1
2
3
4
5
6
7
8
9>db.mycol.save(
{
"_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Yiibai New Topic", "by":"Yiibai Yiibai"
}
)
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"Yiibai Yiibai New Topic", "by":"Yiibai Yiibai"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Yiibai Overview"}
删除文档
MongoDB 的 remove()
方法用于从集合中删除文档。remove()方法接受两个参数。一个是标准缺失,第二是justOne标志
deletion criteria : 根据文件(可选)删除条件将被删除。
justOne : (可选)如果设置为true或1,然后取出只有一个文档。
语法
remove()方法的基本语法如下1
>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)
例子
考虑mycol集合有如下数据。1
2
3{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Yiibai Overview"}
下面的例子将删除所有的文件,其标题为 ‘MongoDB Overview’1
2
3
4>db.mycol.remove({'title':'MongoDB Overview'})
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Toturials Overview"}
只删除一个
如果有多个记录,并要删除仅第一条记录,然后在 remove()
方法设置参数 justOne
。1
>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
删除所有文件
如果没有指定删除条件,则MongoDB将从集合中删除整个文件。这相当于SQL的 truncate 命令。1
2>db.mycol.remove()
>db.mycol.find()