MongoDB简介
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB创建删除数据库
MongoDB使用 use DATABASE_NAME
命令来创建数据库。如果指定的数据库DATABASE_NAME
不存在,则该命令将创建一个新的数据库,否则返回现有的数据库。
创建
use 命令
MongoDB使用 use DATABASE_NAME
命令来创建数据库。如果指定的数据库DATABASE_NAME
不存在,则该命令将创建一个新的数据库,否则返回现有的数据库。
语法
use DATABASE
语句的基本语法如下 -
use DATABASE_NAME
示例
如果要创建一个名称为<newdb>
的数据库,那么使用 use DATABASE
语句将如下所示:
> use newdb
switched to db newdb
要检查当前选择的数据库,请使用 db
命令 -
>db
newdb
如果要检查数据库列表,请使用命令:show dbs
。
>show dbs
local 0.000025GB
test 0.00002GB
创建的数据库(newdb
)不在列表中。要显示数据库,需要至少插入一个文档,空的数据库是不显示出来的。
>db.items.insert({
"name":"yiibai tutorials"})
>show dbs
local 0.00005GB
test 0.00002GB
newdb 0.00002GB
在 MongoDB 中默认数据库是:test
。 如果您还没有创建过任何数据库,则集合/文档将存储在test
数据库中。
删除
db.dropDatabase() 方法
MongoDB中的 db.dropDatabase()
命令用于删除现有的数据库。
db.dropDatabase()
这将删除当前所选数据库。 如果没有选择任何数据库,那么它将删除默认的’test
‘数据库。
示例
首先,使用命令show dbs
检查可用数据库的列表。
>show dbs
local 0.00025GB
newdb 0.0002GB
test 0.00012GB
如果要删除新数据库<newdb>
,那么dropDatabase()
命令将如下所示:
>use newdb
switched to db newdb
>db.dropDatabase()
>{
"dropped" : "newdb", "ok" : 1 }
现在检查数据库列表,如下 -
>show dbs
local 0.00025GB
test 0.0002GB
创建集合
createCollection()方法
MongoDB 的 db.createCollection(name,options)
方法用于在MongoDB 中创建集合。
语法
createCollection()
命令的基本语法如下 -
db.createCollection(name, options)
在命令中,name
是要创建的集合的名称。 options
是一个文档,用于指定集合的配置。
参数 | 类型 | 描述 |
---|---|---|
name |
String | 要创建的集合的名称 |
options |
Document | (可选)指定有关内存大小和索引的选项 |
options
参数是可选的,因此只需要指定集合的名称。 以下是可以使用的选项列表:
字段 | 类型 | 描述 |
---|---|---|
capped |
Boolean |
(可选)如果为true ,则启用封闭的集合。上限集合是固定大小的集合,它在达到其最大大小时自动覆盖其最旧的条目。 如果指定true ,则还需要指定size 参数。 |
autoIndexId |
Boolean |
(可选)如果为true ,则在_id 字段上自动创建索引。默认值为false 。 |
size |
数字 | (可选)指定上限集合的最大大小(以字节为单位)。 如果capped 为true ,那么还需要指定此字段的值。 |
max |
数字 | (可选)指定上限集合中允许的最大文档数。 |
在插入文档时,MongoDB首先检查上限集合capped
字段的大小,然后检查max
字段。
例子
没有使用选项的createCollection()
方法的基本语法如下 -
>use test
switched to db test
>db.createCollection("mycollection")
{
"ok" : 1 }
可以使用命令show collections
检查创建的集合。
>show collections
mycollection
以下示例显示了createCollection()
方法的语法,其中几个重要选项 -
> db.createCollection("mycol", {
capped : true, autoIndexId : true, size : 6142800, max : 10000 })
{
"ok" : 1 }
在 MongoDB 中,不需要创建集合。当插入一些文档时,MongoDB 会自动创建集合。
>db.newcollection.insert({
"name" : "yiibaitutorials"})
>show collections
mycol
newcollection
mycollection
删除集合
drop()方法
MongoDB 的 db.collection.drop()
用于从数据库中删除集合。
语法
drop()
命令的基本语法如下 -
db.COLLECTION_NAME.drop()
示例
首先,检查数据库 test
中可用的集合。
>use test
switched to db test
> show collections
mycol
mycollection
newcollection
现在删除名称为 mycollection
的集合。
>db.mycollection.drop()
true
再次检查当前数据库的集合列表,如下 -
> show collections
mycol
newcollection
如果选定的集合成功删除,drop()
方法将返回true
,否则返回false
。
插入文档
insert()方法
要将数据插入到 MongoDB 集合中,需要使用 MongoDB 的 insert()
或save()
方法。
语法
insert()
命令的基本语法如下:
>db.COLLECTION_NAME.insert(document)
示例
>db.mycol.insert({
_id: 100,
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
字节划分如下 -
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要在单个查询中插入多个文档,可以在insert()
命令中传递文档数组。如下所示 -
> db.mycol.insert([
{
_id: 101,
title: 'MongoDB Guide',
description: 'MongoDB is no sql database',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: 102,
title: 'NoSQL Database',
description: "NoSQL database doesn't have tables",
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 210,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2017,11,10,2,35),
like: 0
}
]
},
{
_id: 104,
title: 'Python Quick Guide',
description: "Python Quick start ",
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['Python', 'database', 'NoSQL'],
likes: 30,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2018,11,10,2,35),
like: 590
}
]
}
])
要插入文档,也可以使用db.post.save(document)
。 如果不在文档中指定_id
,那么save()
方法将与insert()
方法一样自动分配ID的值。如果指定_id
,则将以save()
方法的形式替换包含_id
的文档的全部数据。
其它插入文档的方法
db.collection.insertOne()方法
db.collection.insertOne()
方法将单个文档插入到集合中。以下示例将新文档插入到库存集合中。 如果文档没有指定_id
字段,MongoDB会自动将_id
字段与ObjectId
值添加到新文档。
db.inventory.insertOne(
{
item: "canvas", qty: 100, tags: ["cotton"], size: {
h: 28, w: 35.5, uom: "cm" } }
)
db.collection.insertOne()
方法返回包含新插入的文档的`_id```字段值的文档。
执行结果如下 -
> db.inventory.insertOne(
... {
item: "canvas", qty: 100, tags: ["cotton"], size: {
h: 28, w: 35.5, uom: "cm" } }
... )
{
"acknowledged" : true,
"insertedId" : ObjectId("5955220846be576f199feb55")
}
db.collection.insertMany()方法
db.collection.insertMany()
方法将多个文档插入到集合中,可将一系列文档传递给db.collection.insertMany()
方法。以下示例将三个新文档插入到库存集合中。如果文档没有指定_id
字段,MongoDB会向每个文档添加一个ObjectId值的_id
字段。
db.inventory.insertMany([
{
item: "journal", qty: 25, tags: ["blank", "red"], size: {
h: 14, w: 21, uom: "cm" } },
{
item: "mat", qty: 85, tags: ["gray"], size: {
h: 27.9, w: 35.5, uom: "cm" } },
{
item: "mousepad", qty: 25, tags: ["gel", "blue"], size: {
h: 19, w: 22.85, uom: "cm" } }
])
insertMany()
返回包含新插入的文档_id
字段值的文档。执行结果如下 -
> db.inventory.insertMany([
... {
item: "journal", qty: 25, tags: ["blank", "red"], size: {
h: 14, w: 21, uom: "cm" } },
... {
item: "mat", qty: 85, tags: ["gray"], size: {
h: 27.9, w: 35.5, uom: "cm" } },
... {
item: "mousepad", qty: 25, tags: ["gel", "blue"], size: {
h: 19, w: 22.85, uom: "cm" } }
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("59552c1c46be576f199feb56"),
ObjectId("59552c1c46be576f199feb57"),
ObjectId("59552c1c46be576f199feb58")
]
}
查询文档
find()方法
要从MongoDB集合查询数据,需要使用MongoDB的find()
方法。
语法
find()
命令的基本语法如下:
>db.COLLECTION_NAME.find(document)
find()
方法将以非结构化的方式显示所有文档。
pretty()方法
要以格式化的方式显示结果,可以使用pretty()
方法。
语法
> db.mycol.find().pretty()
示例
>db.mycol.find().pretty()
{
"_id": 100,
"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()
方法,它只返回一个文档。
MongoDB 与 RDBMS的等效 Where 子句
要在一些条件的基础上查询文档,可以使用以下操作。
操作 | 语法 | 示例 | RDBMS等效语句 |
---|---|---|---|
相等 | {<key>:<value>} |
db.mycol.find({"by":"yiibai"}).pretty() |
where by = 'yiibai' |
小于 | {<key>:{$lt:<value>}} |
db.mycol.find({"likes":{$lt:50}}).pretty() |
where likes & |