mongo對內嵌數組的操作

由於mongo的弱關聯關係,導致mongo的內嵌數組會被頻繁使用,以達到一定的"關聯關係"。所以對mongo的數組的操作也是非常重要的。接下來簡單的介紹一下mongo對數組的操作,至於用java進行這些操作,請參考java對mongo的基本操作,套用一下即可

1、增加

操作符:$push 向已有的數組末尾加入一個元素,若數組不存在則會自動創建數組,可以增加重複元素。

例句:db.blog.update({"title":"A"},{$push:{"comments":{"testAdd":"T"}}});

則向blog集合中的title爲A的文檔中的comments數組中的末尾增加了{"testAdd":"T"}記錄,如果文檔中沒有comments數組,則會自動創建comments數組,然後進行添加,但是如果匹配的條件{"title":"A"}不存在則不會自動添加,而是添加失敗。

操作符:$addToSet 可以向數組內增加元素,但是如果元素已存在(重複元素),則增加失敗

例句:db.blog.update({"title":"A"},{$addToSet:{"comments":{"testAdd":"T"}}});

則向blog集合中的title爲A的文檔中的comments數組中的末尾增加了{"testAdd":"T"}記錄,如果文檔中沒有comments數組,則會自動創建comments數組,但是如果第二次執行同樣的語句則會發現數據庫中並沒有進行添加操作,因爲數據這時重複了

$addToSet還可以和$each進行配合使用,一次向數組中添加多條內容

例句:db.blog.update({"title":"A"},{$addToSet:{"comments":{$each:[{"testAdd":"T"},{"testAdd":"X"}]}}});

則向blog集合中的title爲A的文檔中的comments數組中的末尾增加了{"testAdd":"T"}和{"testAdd":"X"}記錄,這裏注意$each後面跟的是一個數組,他會遍歷數組中的內容,一一執行

2、刪除

操作符:$pop 從數組的一端刪除元素

例句:db.blog.update({"title":"A"},{$pop:{"comments":1}});

則刪除了blog集合中的title爲A的文檔中的comments數組中的最後一條記錄,1::刪除最後一條數據,-1:刪除第一條數據

但是很多情況下我們需要根據條件去刪除一下數組中的記錄,這是$pop就幫不上什麼忙了,就需要下一個操作符了

操作符:$pull

例句:db.blog.update({"title":"A"},{$pull:{"comments":{"testAdd":"T"}}});

則刪除了blog集合中的title爲A的文檔中的comments數組中所有滿足條件{"testAdd":"T"}的元素

3、修改

操作符:$set修改數組中的元素

例句:db.blog.update({"comments.testAdd":"T"},{$set:{"comments.$.testAdd":"z"}});

這裏注意第一個查詢條件必須數組.字段名,否則修改失敗,有人可能會問後面的{"comments.$.testAdd":"z"}中的$符是幹嘛用的,他在這裏面代表的相當於是數組的下表,如果我們明確的知道下標的話,我們完全可以這麼寫,比如下表爲0:{"comments.0.testAdd":"z"},但大多數情況下我們是不知道下標的,所以用通配符$來表示,這樣只會修改匹配的第一條數據,而不是所有匹配到的數據,這點需要注意

4、查詢

例句:db.blog.find({"comments.testAdd":"T"})

這裏返回的是整個文檔,至於如何返回想要的結果接下來的博客會介紹。

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