Mongodb對內嵌數組的增刪改


首先構造一些數據

1 db.student.insert({
2     name:'hunter',
3     courses:[{  name:'英語',   classRoom:'1001'},{  name:'高等數學',   classRoom:'1001'}]
4 })

 1、新增操作,往courses新增一個課程

db.student.update({name:'hunter'},{ $addToSet: {courses:{ name:'復變函數',  classRoom:'1002'} } })

 重復執行一下以上指令,發現並沒有再新增一個課程,相同的數據只寫入一次。

 那么要插入重復元素怎么處理,用關鍵字$push替代$addToSet,其他的不變,執行完后,可以發現,數據里有兩門一樣的復變函數課程。

db.student.update({name:'hunter'},{ $push: {courses:{ name:'復變函數',  classRoom:'1002'} } })

 2、刪除操作

下面來看看把復變函數這門課程進行刪除

使用$pull

db.student.update({name:'hunter'},{ $pull: {courses:{ name:'復變函數',  classRoom:'1002'} } })

執行完之后,會發現,關於復變函數的兩條記錄均被刪除了,$pull會把匹配的數據全部刪除。

使用$pop操作符,該使用場景應該還是比較少的

db.student.update({name:'hunter'},{ $pop: {courses:1 } })

該操作會把在數組的最后一個元素進行刪除,如果把1修改成-1,那么刪除的數組的第一個元素。

3、修改操作

db.student.update({name:'hunter','courses.name':'英語'},{ $set: {'courses.$.classRoom':'1008'} })

$set操作符執行后,如果記錄匹配到多條,用$只進行了第一個元素的更改,需要多條修改那么用$[],如果指定下標修改,那么把$修改為元素的下標即可,索引從0開始,update修改也只是修改匹配的第一條記錄,如果要多條,使用updateMany()或者options設置為multi:true;

 4、查詢

假設當前數據是這樣的。

{name:'hunter',courses:[{  name:'英語',   classRoom:'1001'},{  name:'復變函數',   classRoom:'1001'}]
{name:'tom',courses:[{  name:'英語',   classRoom:'1001'},{  name:'復變函數',   classRoom:'1002'}]

這個查詢全部的記錄都會查出來。

db.student.find({'courses.classRoom':'1001','courses.name':'復變函數'})

嚴格匹配查詢,這樣只有hunter的記錄能查詢出來。

//匹配出正確的文檔

db.student.find({'courses':{$elemMatch:{'classRoom':'1001','name':'復變函數'}}})
//這個是匹配出正確的文檔后,再篩選指定的數據,find的第二個參數是個project,雖然與查詢參數是一樣的,作用倒是不同。

db.student.find({'courses':{$elemMatch:{'classRoom':'1001','name':'復變函數'}}},{'courses':{$elemMatch:{'classRoom':'1001','name':'復變函數'}}})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM