玩轉mongodb(四):細說插入、更新、刪除和查詢

來源:互聯網
上載者:User

標籤:

插入:

    使用insert或save方法想目的地組合插入一個文檔:

    db.person.insert({"name":"ryan","age":30});

    使用batchInsert方法實現批量插入,它與insert方法非常類似,只是它接受的是一個文檔數組作為參數。一次發送數十,數百乃至數千個文檔會明顯提高插入的速度。

    db.person.batchInsert([{"name":"ryan","age":30},{"name":"pitaya","age":2}]);

    如果在批量插入的過程中有一個文檔插入失敗,那麼在這個文檔之前的所有文檔都會成功插入到集合中,而這個文檔以及之後的所有文檔全部插入失敗。如果希望batchInsert忽略錯誤並且繼續執行後續插入,可以使用continueOnError選項。shell並不支援這個選項,但所有的驅動程式都支援。 

更新:

    使用update方法來更新集合中的資料。update有四個參數,前兩個參數是必須的。

    db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

    第一個參數:查詢文檔,用於定位需要更新的目的文件。

    第二個參數:修改器文檔,用於說明要對找到的文檔進行哪些修改。

    第三個參數:true表示要使用upsert,即如果沒有找到符合更新條件的文檔,就會以這個條件和更新文檔為基礎建立一個新的文檔。如果找到了匹配的文檔,則正常更新。

    第四個參數:true表示合格所有文檔,都要執行更新。

    修改器:

    $set:用來指定一個欄位的值。如果這個欄位不存在,則建立它。對於更新而言,對符合更新條件的文檔,修改執行的欄位,不需要全部覆蓋。

    db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

    $inc:用來增加已有鍵的值,或者該鍵不存在就建立一個。對於投票等有變化數值的情境,這個會非常方便。

    db.person.update({"name":"ryan"},{"$inc":{"age":2}},true,true);//對符合name等於ryan的文檔,age欄位加2。

    $push:向已有數組末尾加入一個元素。

    db.person.update({"name":"ryan"},{"$set":{"language":["chinese"]}},true,true);//對符合name等於ryan的文檔,添加一個language的數組

    db.person.update({"name":"ryan"},{"$push":{"language":"english"}},true,true);//給數組的末尾添加一個值。

    $addToSet:避免向數組插入重複的值。

    db.person.update({"name":"ryan"},{"$addToSet":{"language":"english"}},true,true);

    $each:與$push和$addToSet結合,一次給數組添加多個值。

    db.person.update({"name":"ryan"},{"$push":{"language":{"$each":["Japanese","Portuguese"]}}},true,true);

    db.person.update({"name":"ryan"},{"$addToSet":{"language":{"$each":["Japanese","Portuguese"]}}},true,true);

    $pop:可以從數組的任何一端刪除元素。

    db.person.update({"name":"ryan"},{"$pop":{"language":1}},true,true);//從數組的末尾刪除一個元素

    db.person.update({"name":"ryan"},{"$pop":{"language":-1}},true,true);//從數組的頭部刪除一個元素

    $pull:刪除數組對應的值。全部刪除。

    db.person.update({"name":"ryan"},{"$pull":{"language":"english"}},true,true);

刪除:

    使用remove方法刪除集合中的資料。它可以接受一個查詢文檔作為選擇性參數。給定這個參數以後,只有合格文檔才能被刪除。(刪除資料是永久性的,不能撤銷,也不能恢複)。

    db.person.remove({"name":"ryan"});//刪除person集合中name欄位的值等於ryan的所有文檔。

    db.person.remove();//刪除person集合中所有的文檔。

    使用drop方法代替remove方法,可以大幅度提高刪除資料的速度。但是這個方法不能指定任何限定條件。而且整個集合都會被刪除,包括索引等資訊,甚用!!

    db.person.drop();

查詢:

    MongoDB中使用find方法來進行查詢。查詢就是返回一個集合中文檔的子集,子集的範圍從0個文檔到整個集合。find方法接受兩個參數。

    第一個參數決定了要返回哪些文檔,參數的內容是查詢的條件。

    第二個參數來指定想要的鍵(欄位)。第二個參數存在的情況:鍵的值為1代表要顯示,為0代表不顯示。“_id”預設顯示,其他預設不顯示。第二個參數不存在的情況:所有欄位預設顯示。

    db.person.find({"name":"ryan"},{"name":1});

    

    查詢條件:

    $lt、$lte、$gt、$gte這四個,就是全部的比較操作符(沒有$eq這個操作符),分別對應<、<=、>、>=。

    db.person.find({"age":{"$lt":10}});

    這裡提供一段小指令碼,插入10萬條資料,做之後的測試用。

1 for(var i=0;i<100000;i++){2     db.person.insert({"name":"ryan"+i,"age":i});3 }

    $in、$nin,用來查詢一個鍵的多個值。

    db.person.find({"age":{"$in":[1,3]}});//查詢age等於1或3的文檔。

    db.person.find({"age":{"$nin":[1,3]}});//查詢age不等於1或3的文檔。

    $or,用來查詢多個鍵的多個值。可以和$in等配合使用。

    db.person.find({"$or":[{"name":"ryan2"},{"age":3}]});//查詢name等於ryan2   或者   age等於3的文檔。

    $exists,查詢的鍵對應是值是null的,預設會返回null和鍵不存在的文檔。可以通過$exists來判斷該鍵是否存在。

    db.person.find({"age":{"$in":[null],"$exists":true}});//查詢age等於null,並且鍵是存在的文檔。

    $where,用它可以在查詢中執行任意的javascript,這樣就能在查詢中做(幾乎)任何事情。為了安全起見,應該嚴格限制或者消除"$where"語句的使用。

    db.person.find({"$where":function(){

        ...;//這裡可以是任意的javascript語句。

    }})

    遊標:利用遊標可以限制結果的數量,略過部分結果,根據任意鍵按任意順序的組合對結果進行各種排序,或者是執行其他的一些強大的操作。

1 var cursor = db.person.find();2 while(cursor.hasNext()){3     obj = cursor.next();4     ...;//這裡可以做任何事情。  5 }

    常用的shell:

    limit:只返回前面多少個結果。

    db.person.find().limit(2);//查詢合格文檔,顯示前兩個文檔。

    skip:跳過多少個結果後顯示剩餘的。

    db.person.find().skip(2);//查詢合格文檔,顯示跳過2個文檔後剩餘的所有文檔。 

    sort:用於排序。接受一個對象(一組索引值對)作為參數,鍵對應文檔的鍵名,值代表排序的方向。排序的方向可以是1(升序)或者-1(降序)。如果指定了多個鍵,則按照這些鍵被指定的順序逐個排序。

    db.person.find().sort({"name":1,"age":-1});//查詢的結果,按照name升序,age降序來排序顯示。

玩轉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.