mongodb中update的使用

由於在使用mongodb的過程中有碰到下面的問題,所以寫下來方便以後查閱。

下面是一段示例代碼:

Mongo mongo = new Mongo("localhost", 27017); 
DB db = mongo.getDB("abc"); 
DBCollection collection = db.getCollection("aaa");
DBObject query = new BasicDBObject();
query.put("xx", xx);
DBObject record = new BasicDBObject();
record.put("xxx", xxx);
collection.update(query, record, true, true);

在運行程序之前,mongodb中並不存在abc這個DB,也不存在aaa這個collection。

但是,按照正常情況,通過調用getDB獲取數據庫,如果是數據庫不存在的情況下,會自動創建該數據庫。同理,調用getColletion的時候,也會自動創建不存在的Colletion。

結果,運行程序之後發現,​mongodb中確實創建了abc這個數據庫,但是還是不存在aaa這個Collection。

難道是getCollection調用的有問題,所以會創建失敗?

可是調試的時候,這裏並沒有出現異常啊,而且能夠正常的執行完update。

​那難道是update的時候插入數據失敗了?由於沒有數據,導致了Colletion也不會去創建?

查看了一下​​update的說明,第三個參數(upsert if the database should create the element if it does not exist)說明如果query的記錄不存在的話,會直接新創建一條記錄,那按道理應該不會出現插入數據失敗的情況啊?

實在沒辦法,只好先把update試着用insert代替看能不能成功。結果發現改完之後的程序正常了!

所以,問題就是出在了update當中!回過頭再仔細的研究了一下update的說明,發現了一個小細節(An object will not be inserted if it does not exist in the collection and upsert=true and multi=true.)。

​​​​好了,那麼問題也就解決了。

以後需要注意的有兩點:

  1. 對於不存在的Colletion來說,使用getColletion的時候,只有在插入了數據之後,纔會去創建​該Colletion。

  2. upsert和multi兩個參數同時爲true時, 就算Colletion中不存在滿足query條件的記錄, update操作也不會去直接添加該記錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章