【轉】MongoDB 知識要點一覽

來源:互聯網
上載者:User

標籤:

原文連結 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 mydbswitched 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 知識要點一覽

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.