標籤:
原文連結 http://www.cnblogs.com/zhangzili/p/4975080.html
MongoDB 知識要點一覽
1、啟動mongoDb資料庫:
進入mongoDB的安裝目錄,執行如下命令
C:\Program Files\MongoDB\Server\3.0\bin>mongod.exe --dbpath "C:\Program Files\MongoDB\Server\3.0\db"
啟動成功後在開啟一個cmd視窗,進入mongoDB的安裝目錄,執行mongo.exe,預設進入test庫
2、use DATABASE_NAME 用於建立資料庫。該命令如果資料庫不存在,將建立一個新的資料庫, 否則將返回現有的資料庫。
3、如果想查詢資料庫列表,那麼使用命令 show dbs ;要顯示的資料庫,需要至少插入一個文檔進去。MongoDB的預設資料庫是test。 如果沒有建立任何資料庫,那麼集合將被儲存在測試資料庫。
4、db.dropDatabase() 命令用於刪除現有的資料庫。
如果想刪除新的資料庫 <mydb>, 那麼 dropDatabase() 命令將如下所示:
12345 |
>use mydb switched to db mydb >db.dropDatabase() >{ "dropped" : "mydb" , "ok" : 1 } > |
5、db.createCollection(name, options) 用於建立集合。 在命令中, name 是要建立集合的名稱。 Options 是一個文檔,用於指定集合的配置
options:
欄位 類型 描述
capped Boolean (可選)如果為true,它啟用上限集合。上限集合是一個固定大小的集合,當它達到其最大尺寸會自動覆蓋最老的條目。 如果指定true,則還需要指定參數的大小。
autoIndexID Boolean (可選)如果為true,自動建立索引_id欄位。預設的值是 false.
size number (可選)指定的上限集合位元組的最大尺寸。如果capped 是true,那麼還需要指定這個欄位。
max number (可選)指定上限集合允許的最大檔案數。
在MongoDB中並不需要建立集合。 當插入一些文檔 MongoDB 會自動建立集合。
>db.yiibai.insert({"name" : "yiibai"})>show collectionsmycolmycollectionsystem.indexesyiibai>
6、刪除集合MongoDB 的 db.COLLECTION_NAME.drop() 用於從資料庫中刪除集合。
下面給出的例子將刪除給定名稱的集合:mycollection
>use mydbswitched to db mydb>db.mycollection.drop()true>
7、插入文檔: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個位元組被劃分如下:
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要以單個查詢插入多個文檔,可以通過文檔 insert() 命令的數組方式。
db.mycol.insert({},{},{},……)
8、查詢文檔:db.COLLECTION_NAME.find(),find() 方法將在非結構化的方式顯示所有的檔案。 如果顯示結果是格式化的,那麼可以用pretty() 方法。
文法
>db.mycol.find().pretty()
除了find()方法還有findOne()方法,僅返回一個文檔。
MongoDB的Where條件:
操作 文法 樣本 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
MongoDB的and條件:
在 find()方法,如果您傳遞多個鍵通過","將它們分開,那麼MongoDB對待它就如AND條件一樣。基本文法如下所示:
>db.mycol.find({key1:value1, key2:value2}).pretty()
MongoDB的or條件:
要查詢基於OR條件的檔案,需要使用$or關鍵字。OR的基本文法如下所示:
>db.mycol.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
例子
等效於SQL的where子句:‘where likes>10 AND (by = ‘yiibai tutorials‘ OR title = ‘MongoDB Overview‘)‘
>db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai tutorials"}, {"title": "MongoDB Overview"}] }).pretty()
9、更新、添加文檔
update()方法的基本文法如下
>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
下面的例子將設定其標題“MongoDB Overview”的檔案為新標題為“New MongoDB Tutorial”
>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。
>db.mycol.update({‘title‘:‘MongoDB Overview‘},{$set:{‘title‘:‘New MongoDB Tutorial‘}},{multi:true})
save() 方法替代或添加文檔:>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
下面的例子將替換該檔案_id ‘5983548781331adf45ec7‘
>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"}>
10、刪除文檔
MongoDB 的 remove()方法用於從集合中刪除文檔。remove()方法接受兩個參數。一個是標準缺失,第二是justOne標誌
deletion criteria : 根據檔案(可選)刪除條件將被刪除。
justOne : (可選)如果設定為true或1,然後取出只有一個文檔。
下面的例子將刪除所有的檔案,其標題為 ‘MongoDB Overview‘
>db.mycol.remove({‘title‘:‘MongoDB Overview‘})
如果有多個記錄,並要刪除僅第一條記錄,然後在 remove()方法設定參數 justOne 。
>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
如果沒有指定刪除條件,則MongoDB將從集合中刪除整個檔案。這相當於SQL的 truncate 命令。
>db.mycol.remove({})>db.mycol.find()>
11、find()部分欄位(mongodb投影)
mongodb投影意義是只選擇需要的資料,而不是選擇整個一個文檔的資料。如果一個文檔有5個欄位,只需要顯示3個,只從中選擇3個欄位。
MongoDB的find()方法,解釋了MongoDB中查詢文檔接收的第二個可選的參數是要檢索的欄位列表。在MongoDB中,當執行find()方法,那麼它會顯示一個文檔的所有欄位。要限制這一點,需要設定欄位列表值為1或0。1是用來顯示欄位,而0被用來隱藏欄位。
文法
find()方法的基本文法如下
>db.COLLECTION_NAME.find({},{KEY:1})
12、Limit() 方法顯示多少行
要在MongoDB中限制記錄,需要使用limit()方法。 limit() 方法接受一個數字類型的參數,這是要顯示的文檔數量。
文法
limit()方法的基本文法如下
>db.COLLECTION_NAME.find().limit(NUMBER)
還有一個方法 skip()也接受數字型別參數並用於跳過檔案數。
文法
skip() 方法的基礎文法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
例子:
下面的例子將僅顯示第二個文檔。
從第二行開始查,只查一條:
>db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1){"title":"NoSQL Overview"}>
請注意,skip() 方法的預設值是 0
13、文檔排序(對查詢出的資料進行排序)
要排序MongoDB中的文檔,需要使用 sort()方法。 sort() 方法接受一個包含欄位列表以及排序次序的文檔。 要使用1和-1指定排序次序。1用於升序,而-1是用於降序。
文法
sort()方法的基本文法如下
>db.COLLECTION_NAME.find().sort({KEY:1})
下面的例子將顯示的檔案排序按標題降序排序。
>db.mycol.find({},{"title":1,_id:0}).sort({"title":-1}){"title":"Yiibai Yiibai Overview"}{"title":"NoSQL Overview"}{"title":"MongoDB Overview"}>
請注意,如果不指定排序類型,那麼 sort() 方法將以升序排列文檔。
14、MongoDB索引
索引支援查詢高效率執行。如果沒有索引,MongoDB必須掃描集合中的每一個文檔,然後選擇那些符合查詢語句的文檔。若需要 mongod 來處理大量資料,掃描是非常低效的。
索引是特殊的資料結構,儲存在一個易於設定遍曆形式的資料的一小部分。索引儲存在索引中指定特定欄位的值或一組欄位,並排序欄位的值。
要建立索引,需要使用MongoDB的ensureIndex()方法。
文法
ensureIndex()方法的基本文法如下
>db.COLLECTION_NAME.ensureIndex({KEY:1})
這裡鍵是要建立索引欄位,1是按名稱升序排序。若以按降序建立索引,需要使用 -1.
例子:
>db.mycol.ensureIndex({"title":1})>
在 ensureIndex()方法,可以通過多個欄位,來建立多個欄位索引。
>db.mycol.ensureIndex({"title":1,"description":-1})
ensureIndex() 方法還接受選項列表(這是可選),其列表如下:
參數 類型 描述
background Boolean 構建索引在後台以便建立索引不阻止其它資料庫活動。指定true時建立在後台。預設值是false.
unique Boolean 建立一個唯一的索引,以使集合將不接受插入的的文檔,其中的索引關鍵字或鍵匹配索引的現有值。指定true以建立唯一索引。預設值是 false.
name string 索引的名稱。如果未指定,MongoDB通過串連索引的欄位和排序次序的名稱產生一個索引名。
dropDups Boolean 建立一個欄位唯一索引時可能會有重複。MongoDB索引鍵僅第一次出現,並從集合中刪除包含該鍵後續出現的所有文檔。指定true以建立唯一索引。預設值是 false.
sparse Boolean 如果為true,索引只引用與指定的欄位的文檔。這些索引使用更少的空間,但在某些情況下表現不同(特別是排序)。預設值是 false.
expireAfterSeconds integer 指定的值,以秒為單位,作為一個TTL控制MongoDB保留在此集合檔案多久。
v index version 索引版本號碼。預設的索引版本取決於mongod建立索引時啟動並執行版本。
weights document 重量(weight )是一個數字,它是從1至99,999的數字,表示欄位相對於其它索引欄位在得分方面的意義。
default_language string 對於文本索引,並為詞幹分析器和標記產生器列表中的語言決定了停用詞和規則。它的預設值: english.
language_override string 對於一個文本索引,包含在文檔中指定欄位的名稱,語言來覆蓋預設語言。它的預設值:language.
15、MongoDB 彙總
彙總操作處理資料記錄並返回計算結果。從多個文檔彙總分組運算元值,並可以執行多種對分組資料業務返回一個結果。 在SQL中的count(*),使用group by 與mongodb的彙總是等效的。 對於MongoDB的彙總,使用的是aggregate()方法。
文法
aggregate()方法的基本文法如下
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
例子:
在集合中有以下資料:
123456789101112131415161718192021222324252627 |
{ _id: ObjectId(7df78ad8902c) title: ‘MongoDB Overview‘ , description: ‘MongoDB is no sql database‘ , by_user: ‘Yiibai Yiibai ‘ , url: ‘http://www.yiibai.com‘ , tags: [ ‘mongodb‘ , ‘database‘ , ‘NoSQL‘ ], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: ‘NoSQL Overview‘ , description: ‘No sql database is very fast‘ , by_user: ‘Yiibai Yiibai‘ , url: ‘http://www.yiibai.com‘ , tags: [ ‘mongodb‘ , ‘database‘ , ‘NoSQL‘ ], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: ‘Neo4j Overview‘ , description: ‘Neo4j is no sql database‘ , by_user: ‘Neo4j‘ , url: ‘http://www.neo4j.com‘ , tags: [ ‘neo4j‘ , ‘database‘ , ‘NoSQL‘ ], likes: 750 } |
現在從上面的集合,如果想知道每一個使用者編寫的教程是多少,那麼使用aggregate()方法,如所示的列表:
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]){"result" : [{"_id" : "Yiibai Yiibai","num_tutorial" : 2},{"_id" : "Neo4j","num_tutorial" : 1}],"ok" : 1}>
用於上述用途將等效於sql查詢: select by_user, count(*) from mycol group by by_user
另外,在上述例子中,我們已經使用欄位by_user進行分組並計算總和,也就是by_user 出現各個次數。一個列表中可用的聚集運算式。
運算式 描述 樣本
$sum 從集合累加所有文檔中的定義值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 從集合中的所有文檔計算所有給定值的平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 從集合中擷取的所有檔案的最小的相應值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 從集合中的所有文檔中的相應值中擷取最大值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 插入數組值到文檔中 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 插入值所產生的數組到文檔中,但不會產生重複 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 從源檔案擷取根據分組的標頭檔。通常,這使得只能意會再加上一些以前應用“$sort” -stage db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 從源檔案擷取根據分組的最後檔案。通常,這使得只能意會再加上一些以前應用 “$sort”-stage. db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
16、MongoDB建立備份
要使用 mongodump 命令來執行 MongoDB Database Backup。此命令將轉儲伺服器的所有資料到轉儲目錄。有許多可用的選項,通過它可以限制資料量或建立遠程伺服器備份。
文法
mongodump命令的基本文法如下
>mongodump
例子
啟動 mongod 伺服器。假設 mongod 伺服器運行在本地主機和連接埠 27017. 現在開啟一個命令提示字元,然後轉到你的MongoDB執行個體的bin目錄,然後輸入命令mongodump。
考慮mycol集合有以下資料。
>mongodump
該命令將串連到伺服器127.0.0.1和連接埠27017,並備份所有資料到伺服器上的目錄: /bin/dump/.
以上是可用的選項能夠與mongodump命令一起使用的列表。
此命令將只備份指定資料庫到指定的路徑
文法 描述 樣本
mongodump --host HOST_NAME --port PORT_NUMBER 這個命令將備份指定的mongod執行個體的所有資料庫 mongodump --host yiibai.com --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME 此命令將僅備份指定的特定資料庫集合 mongodump --collection mycol --db test
17、資料恢複
要恢複備份的MongoDB資料,則使用mongorestore命令。該命令將從備份目錄恢複所有的資料。
文法
mongorestore命令的基本文法
>mongorestore
【轉】MongoDB 知識要點一覽