mongodb筆記——查詢
本文爲mongodb關於更新操作的知識點,查詢的請查看上方鏈接。
以下舉例操作集合爲以下格式
student集合(不要太在意這表的設計,只是爲方便舉例而已)
_id | name | age | sex | score | books |
123 | 張三 | 20 | man | [{name:"語文",score:90},{name:"英語",score:90},{name:"數學",score:90}] | ["java","OC","js","mongodb"] |
1、簡單更新
更新在mongodb中使用update(query, obj, upsert, multi)函數,接受四個參數,第一個爲查詢條件,第二個爲更新內容,第三個爲true時表示查詢不存在則插入,默認爲false,第三個爲true時表示更新多條數據,默認爲false,即只更新查詢到的第一條。
例:
//更新張三的age爲21
db.student.update({name:"張三"},{age:21});//整條記錄只剩下age一個字段,正確方式見下條語句
db.student.update({name:"張三"},{$set:{age:21}});
//更新李四的age爲21,如不存在該記錄這插入
db.student.update({name:"李四"},{$set:{name:"李四",age:21}},true);
//將所有sex爲man的記錄的age更新爲19
db.student.update({sex:"man"},{$set:{age:19}},false,true)
注意例子中的第一條語句會覆蓋原數據,即update後該條數據爲你update的內容是什麼就是什麼,你沒update的屬性將會全部抹掉。要加入$set操作符纔可只更新指定的字段。個人對於update函數中的upsert很喜歡,不用像sql需要自己先查一下有沒有該記錄有才執行更新,沒有則執行插入。
2、更新數組的值
對於數組的刪除增加值對應有刪除數組中指定的下標$pop,刪除數組中值匹配$pull,刪除數組中所有匹配的$pullAll,定位$,插入值$addToSet,$addToSet和$each組合使用插入多條數據。
例子:
//刪除張三的第一本書
db.student.update({name:"張三"},{$pop:{books,1}});//-1爲最後個
//刪除張三mongodb這本書
db.student.update({name:"張三"},{$pull:{books,"mongodb"}});
//刪除張三mongodb和java這本書
db.student.update({name:"張三"},{$pullAll:{books,["mongodb","java"]}});
//定位$,$表示位置,比如修改張三第二科目的成績爲100
db.student.update({name:"張三"},{"score.1.score":100})
//爲張三添加nodejs這本書
db.student.update({name:"張三"},{$addToSet:{books:"nodejs"}})
//$addToSet和$each的組合使用,插入多個值,爲張三添加nodejs和SpringMVC兩本書
db.student.update({name:"張三"},{$addToSet:{books:{$each:["nodejs","SpringMVC"]}}})
3、刪除字段
使用$unset操作符,這沒什麼好說的,上個例子
//刪除表的books字段
db.student.update({},{$unset:{"books":""}},false,true)