在上一篇文章中介紹了使用update()就行文檔的更新,都是更新一個單一的文檔。
以下將介紹:1.update()的其它的兩個屬性("upsert"和"mutli")
2.save()shell函數。
1.update更新文檔:
db.collection.update( <query>, <update>, <options> ).
<query>:是查詢條件,相當於SQL查詢中的where條件;
<update>:是新的數據;
<options>:可選項包括兩個key:"upsert"和"mutli",其中upsert和mutli的設置都是0.
下面主要說明upsert和mutli兩個選項:
upsert:如果設置爲1,表示如果update操作的文檔在數據庫中不存在那麼就插入一個新的文檔;
mutli:如果設置爲1,表示是否update符合<query>條件的所有的文檔記錄,默認設置爲0,表示只更新符合<query>條件的第一條文檔。
實例操作:
在c4集合中插入一下數據:
> db.c4.find({"count":32});
{ "_id" : 1, "article" : "lalala", "count" : 32 }
{ "_id" : 2, "article" : "hahahaha", "count" : 32 }
{ "_id" : 3, "article" : "gagagaga", "count" : 32 }
更新一個{"count":34}的文檔,按照<options>的默認情況下,是不能更新{"count":34}的文檔的,因爲此文檔不存在。
1)、將upsert的值設置爲1(或者true):
> db.c4.update({"count":34},{"article":"bright"},{"upsert":true});
然後查找條件爲 {"article":"bright"} 的文檔:
> db.c4.find({"article":"bright"})
{ "_id" : ObjectId("4fc5392dbb418a455d039599"), "article" : "bright" }
注意:這裏多出的數據只有<update>中鍵值對。
2)、設置mutli的值爲1(或者true):它的含義是是否更新符合<query>條件的所有的數據。
如更新{"count":32}的所有的文檔:將其中的article都更新爲"great!"
db.c4.update({"count":32},{"$set":{"article":"great!"}},0,1);最後一個參數是mutli的值
>db.c4.find({"count":32});
{ "_id" : 1, "article" : "great!", "count" : 32 }
{ "_id" : 2, "article" : "great!", "count" : 32 }
{ "_id" : 3, "article" : "great!", "count" : 32 }
如果save的文檔在集合中已經存在,那麼將更新集合,如果不存在才做保存操作。
如此實例:往c4集合中save一個文檔爲{"_id":1,"article":"lalalala","count":32},基於1中的2)做操作。
> db.c4.find({"count":32});
結果是按照{"_id":1}的條件將一條文檔更新了。
假如單純的save一個{"_id":4}主鍵不一樣的文檔則會保存該文檔,這就比較容易了。
如:
多了一條文檔。