首页
技术分享
实用工具 发布文章 新浪微博 Github

首先启动数据库,控制台输入 mongo 进入数据库命令窗口。

创建数据库

MongoDB use DATABASE_NAME 用于创建数据库。该命令如果数据库不存在,将创建一个新的数据库, 否则将返回现有的数据库。

语法:

use DATABASE语句的基本语法如下:

1
> use DATABASE_NAME

例子:

如果想创建一个数据库名称为 <mydb>, 那么 use DATABASE 语句应该如下:

1
2
> use mydb
switched to db mydb

要检查当前选择的数据库使用命令 db

1
2
> db
mydb

如果想查询数据库列表,那么使用命令 show dbs.

1
2
3
> show dbs
local 0.78125GB
test 0.23012GB

所创建的数据库(mydb)不存在于列表中。要显示的数据库,需要至少插入一个文档进去。

1
2
3
4
5
> db.movie.insert({"name":"yiibai tutorials"})
> show dbs
local 0.78125GB
mydb 0.23012GB
test 0.23012GB

MongoDB的默认数据库是test。 如果没有创建任何数据库,那么集合将被保存在测试数据库。

删除数据库

MongoDB db.dropDatabase() 命令用于删除现有的数据库。

语法

dropDatabase()指令的基本语法如下:

1
db.dropDatabase()

这将删除选定的数据库。如果没有选择任何数据库,那么它会删除默认的“test”数据库

例子:

如果想删除新的数据库 <mydb>, 那么 dropDatabase() 命令将如下所示:

1
2
3
4
>use mydb
switched to db mydb
>db.dropDatabase()
>{ "dropped" : "mydb", "ok" : 1 }

创建集合

MongoDB 的 db.createCollection(name, options) 用于创建集合。 在命令中, name 是要创建集合的名称。 Options 是一个文档,用于指定集合的配置。

参数 类型 描述
Name String 要创建的集合的名称
Options Document(可选) 指定有关内存大小和索引选项

选项参数是可选的,所以需要指定集合的唯一名字。

语法

createCollection()方法的基本语法如下

1
2
3
4
>use test
switched to db test
>db.createCollection("mycollection")
{ "ok" : 1 }

可以通过使用 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
2
>db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
{ "ok" : 1 }

在MongoDB中并不需要创建集合。 当插入一些文档 MongoDB 会自动创建集合。

1
2
3
4
5
6
>db.yiibai.insert({"name" : "yiibai"})
>show collections
mycol
mycollection
system.indexes
yiibai

删除集合

MongoDB 的 db.collection.drop() 用于从数据库中删除集合。

语法

drop() 命令的基本语法如下

1
db.COLLECTION_NAME.drop()

例子:

下面给出的例子将删除给定名称的集合:mycollection

1
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
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
>db.post.insert([
{
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
title: 'NoSQL Database',
description: 'NoSQL database doesn't have tables',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 20,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2013,11,10,2,35),
like: 0
}
]
}
])

查询文档

要从集合查询MongoDB数据,需要使用MongoDB的 find()方法。

语法

find()方法的基本语法如下

1
>db.COLLECTION_NAME.find()

find() 方法将在非结构化的方式显示所有的文件。 如果显示结果是格式化的,那么可以用pretty() 方法。

语法

1
>db.mycol.find().pretty()

####例子

1
2
3
4
5
6
7
8
9
10
>db.mycol.find().pretty()
{
"_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"
}

除了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
2
3
4
5
6
7
8
9
10
>db.mycol.find({"by":"yiibai tutorials","title": "MongoDB Overview"}).pretty()
{
"_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"
}

对于上面给出的例子相当于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
2
3
4
5
6
7
8
9
10
>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
"_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"
}

使用 AND 和 OR 在一起 例子

下面给出的例子显示有喜欢数大于100 的文档,其标题要么是 ‘MongoDB Overview’ 或 ‘yiibai tutorials’. 等效于SQL的where子句:where likes>10 AND (by = 'yiibai tutorials' OR title = 'MongoDB Overview')

1
2
3
4
5
6
7
8
9
10
>db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai tutorials"}, {"title": "MongoDB Overview"}] }).pretty()
{
"_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"
}

更新文档

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()