MongoDB基本使用

來源:互聯網
上載者:User

MongoDB內建JavaScript shell MongoDB shell 命令db查看當前指向哪個資料庫 建立 db.col.insert(post) 讀取db.col.find()
db.col.findOne() 更新post.comments=[] db.col.update({title:”My Blog Post”},post)
update函數有兩個參數至少,第一個參數用於匹配待更新的文檔,第二個參數是新的文檔。 刪除 db.col.remove({title:"My Blog Post"})
db.col.remove() //刪除集合中的所有文檔
db.col.drop() //刪除集合 資料類型

JSON只有null,布爾,數字,字串,數組和對象這幾種資料類型。
MongoDB資料類型:
- null
- 布爾
- 數值 預設64位浮點數型數值;NumberInt(“3”)表示4位元組帶正負號的整數;NumberLong(“3”)表示8位元組帶正負號的整數;
- 字串 支援UTF-8字串
- 日期; 不區分時區。自新紀元以來的毫秒數;要用new Date()而非Date()後者返回的日期的字串而非日期的對象;
- Regex
- 數組
- 數組可以包含不同類型的元素

- 數組中甚至可以嵌套數組- MongoDB能夠理解數組的結構,並深入其內部對其內容進行操作;
內嵌文檔

對象ID ;12位元組的id,是文檔的唯一標識。ObjectId()

每個集合裡的文檔的ID是唯一的,不同集合文檔ID可以重複

前4個位元組是時間戳記,從標準紀元開始,單位為秒;

4-6位元組是機器主機名稱的散列值(hash);

7-8位元組是產生ObjectId的進程的進程標識符(PID),用於區分同一機器上的多線程;

9-11位元組是一個自動增加的計數器,保證同一同一秒產生的ObjectId也是不同的;一秒鐘同時允許2563個ObjectId.

位元據;非UTF-8字串要以這種形式儲存 代碼;查詢和文檔中可以插入任意JavaScript代碼; 使用 串連到指定機器上的資料庫:mongo 機器名:連接埠/資料庫名 啟動shell不串連任何資料庫:mongo -nodb 再串連到指定資料庫:

conn = new Mongo("some-host:30000")db = conn.getDB("myDB")
> help擷取協助 只輸入函數名可以查看函數的實現代碼 mongo script1.js script2.js script3.js mongo --quiet server-1:30000/foo scirpt1.js script2.js
指定主機,資料庫,執行指令碼 shell輔助函數不能在檔案中使用,如show dbs對應db.getMongo().getDbs() show collections對應db.getCollectionNames() use foo對應db.getSisterDB("foo") load("defineConnectionTo.js")載入執行 > run("ls","-l","/usr/local")用來執行命令列程式 集合命名如果包含保留字的話 db.getCollection("version") > Object.bsonsize(doc) 查看文檔大小;要求文檔大小必須小於16MB 文檔替換
> var jone = db.col.findOne({name:"jone"})> jone.releationships = {friends:jone.friends,enemies:jone.enemies}{ "friends" : 32, "enemies" : 2 }> jone.usename=jone.namejone> delete jone.friendstrue> delete jone.enemiestrue> delete jone.nametrue> db.col.update({name:"jone"},jone)WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone" }> 
原子性的更新修改器,對指定文檔的某些欄位進行更新
//$inc修改器用來增加一個鍵的值,如果不存在就建立這個鍵> db.col.update({usename:"jone"},{"$inc":{friends:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "friends" : 1 }> db.col.update({usename:jone},{"$set":{friends:2}})WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "friends" : 1 }> db.col.update({usename:"jone"},{"$set":{friends:2}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "friends" : 2 }//unst將這個鍵刪除> db.col.update({usename:"jone"},{"$unset":{friends:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone" }
“$push”向數組末尾加一個元素,如果數組不存在,則建立一個新的數組
> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone" }> db.col.update({usename:"jone"},{"$push":{comments:{name:"joe",email:"joe@example.com",content:"nice"}}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "comments" : [ { "name" : "joe", "email" : "joe@example.com", "content" : "nice" } ] }> db.col.update({usename:"jone"},{"$push":{comments:{name:"bob",email:"bob@example.com",content:"good"}}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find(){ "_id" : ObjectId("5811c15b36c14a6dd31ec9f5"), "releationships" : { "friends" : 32, "enemies" : 2 }, "usename" : "jone", "comments" : [ { "name" : "joe", "email" : "joe@example.com", "content" : "nice" }, { "name" : "bob", "email" : "bob@example.com", "content" : "good" } ] }
“ each“子操作符與“ each“子操作符與“push”結合可以一次插入多個元素 “$slice”限制數組的長度 “$sort”排序 “$ne”條件檢驗,比如在向某個數組中插入資料時,如果不存在某個內容就插入 “$addToSet”也是驗重 {"$pop":{"key":1}}從數組末尾刪除一個元素
{"$pop":{"key":-1}}從數組頭部刪除一個元素
{"$pull":{tem:"flower"}}刪除數組中的所有”flower”
可通過下標訪問數組comments.0數組的第一項 定位器”$” db.col.update({"commments.author:"Jone"},{"$set":{"comments.$.authors:"Jim"}}) $inc因為就地修改,不改變文檔結構,所以比較快;數組修改器可能要改變文檔大小,會慢一些; 填滿因數(paddingFactor)是MongoDB為每個新文檔預留的增長空間。讓一個文檔增大,填滿因數會變大,如果後面的更新導致了更多次的文檔移動,填滿因數會持續增大;如果不再有文檔移動,填滿因數會慢慢降低到1. upsert更新是在找到符合更新條件的對象時,進行更新;找不到時就按update設定的條件建立一個文檔; $setOnInsert建立文檔的時候建立欄位並賦值,以後所有的更新操作時,這個值不再改變; update函數的第四個參數為true表示當有多個合格文檔時,全部更新; getLastError命令可以返回最後一次操作的相關資訊;鍵n的值表示被更新的文檔的數量 db.runCommand({getLastError:1}) findAndModify返回符合更新條件的文檔更新前的值;
ps = db.runCommand({"findAndModify": "processes",    query:{status:"READY"},    sort:{priority:-1},    update:{"$set":{stats:"RUNNING"}}}).value
寫入安全(write concern)是一種用戶端設定,用於控制寫入的安全機制;分為兩種:應答式寫入(資料庫會給出響應,告訴你是否寫入成功)和非應答式寫入(不知道是否寫入成功)。預設是應答式; shell對非應答式的支援與用戶端有區別:shell執行非應答式時會檢查最後一個操作是否成功;即便前面一系列的無效操作,最後一個操作是有效,就不會報錯; 2012年之前,預設的寫入安全方式是非應答的;如何區分:新的都用的MongoClient類;舊的連線物件用的Mondo或者Connection或其他;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.