1. MongoDB 概念解析
一個mongodb中可以建立多個數據庫。
MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中。
MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。
"show dbs" 命令可以顯示所有數據的列表。
執行 "db" 命令可以顯示當前數據庫對象或集合。
運行"use"命令,可以連接到一個指定的數據庫。
2. mongo db 的連接
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb://
這是固定的格式,必須要指定。
username:password@
可選項,如果設置,在連接數據庫服務器之后,驅動都會嘗試登陸這個數據庫
host1
必須的指定至少一個host
, host1
是這個URI唯一要填寫的。它指定了要連接服務器的地址。如果要連接復制集,請指定多個主機地址。
portX
可選的指定端口,如果不填,默認為27017
/database
如果指定username:password@
,連接并驗證登陸指定數據庫。若不指定,默認打開 test 數據庫。
?options
是連接選項。如果不使用/database
,則前面需要加上/。所有連接選項都是鍵值對name=value
,鍵值對之間通過&或;(分號)隔開
3. 數據庫創立
以下實例我們創建了數據庫runoob
:
> use runoob
switched to db runoob
> db
runoob
>
如果你想查看所有數據庫,可以使用 show dbs
命令:
> show dbs
local 0.078GB
test 0.078GB
>
4. 刪除數據庫
首先,查看所有數據庫:
> show dbs
local 0.078GB
runoob 0.078GB
test 0.078GB
接下來我們切換到數據庫 runoob:
> use runoob
switched to db runoob
>
執行刪除命令:
> db.dropDatabase()
{ "dropped" : "runoob", "ok" : 1 }
最后,我們再通過 show dbs 命令數據庫是否刪除成功:
> show dbs
local 0.078GB
test 0.078GB
>
刪除集合,集合刪除語法格式如下:
db.collection.drop()
5. 插入文檔
MongoDB 使用 insert()
或 save()
方法向集合中插入文檔,語法如下:
db.COLLECTION_NAME.insert(document)
實例
以下文檔可以存儲在 MongoDB 的 runoob
數據庫 的 col
集合中:
>db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一個 Nosql 數據庫',
by: '菜鳥教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
以上實例中 col
是我們的集合名,如果該集合不在該數據庫中, MongoDB 會自動創建該集合并插入文檔。
查看已插入文檔:
> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數據庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>
6. 更新文檔
MongoDB 使用 update()
和save()
方法來更新集合中的文檔。接下來讓我們詳細來看下兩個函數的應用及其區別。
update()
方法用于更新已存在的文檔。語法格式如下:
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
:可選,拋出異常的級別。
實例
我們在集合 col 中插入如下數據:
>db.col.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一個 Nosql 數據庫',
by: '菜鳥教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
接著我們通過update()
方法來更新標題(title):
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 輸出信息
> db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一個 Nosql 數據庫",
"by" : "菜鳥教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
可以看到標題(title)由原來的 "MongoDB 教程" 更新為了 "MongoDB"。
以上語句只會修改第一條發現的文檔,如果你要修改多條相同的文檔,則需要設置 multi
參數為true
。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
save() 方法
save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
參數說明:
document
: 文檔數據。
writeConcern
:可選,拋出異常的級別。
7. 刪除文檔
remove()
方法的基本語法格式如下所示:
db.collection.remove(
<query>,
<justOne>
)
如果你的 MongoDB 是 2.6 版本以后的,語法格式如下:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
參數說明:
query
:(可選)刪除的文檔的條件。
justOne
: (可選)如果設為 true 或 1,則只刪除一個文檔。
writeConcern
:(可選)拋出異常的級別。
8 .查詢文檔
MongoDB 查詢數據的語法格式如下:
db.collection.find(query, projection)
query
:可選,使用查詢操作符指定查詢條件
projection
:可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略)。
如果你需要以易讀的方式來讀取數據,可以使用 pretty()
方法,語法格式如下:
>db.col.find().pretty()
pretty()
方法以格式化的方式來顯示所有文檔。
實例
以下實例我們查詢了集合 col 中的數據:
> db.col.find().pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一個 Nosql 數據庫",
"by" : "菜鳥教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
除了find()
方法之外,還有一個 findOne()
方法,它只返回一個文檔。
待續。。。