網(wǎng)站首頁 編程語言 正文
一.Document數(shù)據(jù)插入
1.插入文檔
db.[文檔名].insert({BSON數(shù)據(jù)})
2.批量插入文檔
shell當(dāng)中不支持批量插入,想完成批量插入操作,可以使用shell的for循環(huán),或者其他高級語言當(dāng)中的批量操作方法
例:使用for循環(huán)插入10個學(xué)生,在學(xué)生集合當(dāng)中
我使用的是2.6的版本,發(fā)現(xiàn)已經(jīng)支持了批量插入操作。
3.Save操作
save操作和insert操作的區(qū)別在于,save在遇到_id相同的插入數(shù)據(jù)時候,會覆蓋原來的,而insert會提示錯誤
例子:
用insert的方法去插入一個_id相同的數(shù)據(jù)
二.Document數(shù)據(jù)刪除
1.刪除列表中所有數(shù)據(jù)
db.[文檔名].remove({})
集合的本身和索引不會別刪除
例子:刪除列表中所有數(shù)據(jù)
2.根據(jù)條件刪除
例: 刪除_id為10的那條記錄
三.Document數(shù)據(jù)更新
1.直接覆蓋更新
db.[文檔名].update({查詢器},{修改器})
{查詢器}就相當(dāng)于是條件
{修改器}就是你要直接覆蓋替換的BSON數(shù)據(jù)
例:更新_id為9,那個學(xué)生,把Name變成age
注意:當(dāng)主鍵沖突的時候會報錯并且停止更新操作
例:我用_id為8的數(shù)據(jù),去替換_id為9的記錄,因為_id為8的數(shù)據(jù)已經(jīng)存在,不允許有兩個主鍵為_id:8
的記錄,所以會報錯。
2.采用insertOrUpdate的做法進(jìn)行更新
db.[文檔名].update({查詢器},{修改器},true)
后面第三個參數(shù)為true,就代表是當(dāng)記錄不存在的時候,就插入一條記錄,如果存在就更新
例:更新一個_id為10的數(shù)據(jù),沒有就插入,有就更新
3.批量更新操作
db.[文檔名].update({查詢器},{修改器},false, true)
※默認(rèn)情況當(dāng)查詢器查詢出多條數(shù)據(jù)的時候默認(rèn)就修改第一條數(shù)據(jù)
先修改一下數(shù)據(jù)如下:
讓_id為9和10的數(shù)據(jù),有相同的內(nèi)容
再插入一個_id=11,age=20的數(shù)據(jù)
第四個參數(shù)不寫的情況下去更新:
如下:只能更新第一個age=20的數(shù)據(jù)
第四個參數(shù)添加并且為true的時候,我們預(yù)期是10和11都能被修正
但是當(dāng)我試圖去更新的時候,報錯了,提示說批量更新只能在有$操作的時候使用
修正插入語句
這里注意$set后面要有":",而且它和它后面的修改器要被{}包起來,因為我第一次使用mongoDB,所以總寫錯。
4.使用修改器來完成局部更新操作
$set它用來指定一個鍵值對,如果存在鍵就進(jìn)行修改不存在則進(jìn)行添加
{$set:{field:value}}
_id為10的數(shù)據(jù),沒有Name屬性,進(jìn)行了添加,有age鍵,就進(jìn)行了修改
$inc
1.適用于數(shù)字類型
2.能夠?qū)︽I對應(yīng)的數(shù)字類型數(shù)值進(jìn)行加減操作
{$inc:{field:value}}
給age=30的數(shù)據(jù)增加2歲,由于沒有使用批量更新參數(shù),所以默認(rèn)修正了第一條
$unset刪除指定的鍵
{$unset:{field:1}}
我在例子里面先是刪除了age=30的數(shù)據(jù)的age屬性,但是有一點不明白,unset后面那個field:1是什么,于是我查了一下,說是后面是什么都無所謂,unset只看鍵不看value,于是又做了第二個例子
$push
1.如果指定的鍵是數(shù)組增追加新的數(shù)值
2.如果指定的鍵不是數(shù)組則中斷當(dāng)前操作,報錯
3.如果不存在指定的鍵則創(chuàng)建數(shù)組類型的鍵值對
{$push:{field:value}}
$pushAll
用法同上,是批量添加數(shù)組數(shù)據(jù)的操作
{$pushAll:{field:array}}
1.第一個操作沒有用$pushAll,所以把["C#","JAVA"]當(dāng)成一個數(shù)組項目處理了
2.第二個操作使用了$pushAll,所以當(dāng)成了兩項來處理的。
$addToSet
往數(shù)組中添加項目,存在就不添加,不存在就添加(push不管存不存在都添加)
{$addToSet:{field:value}}
1.先用push插入,發(fā)現(xiàn)更新完成后有兩個“C#”
2.再用addToSet更新,發(fā)現(xiàn)沒有增加項目
$pop
從指定數(shù)組刪除一個值1刪除最后一個數(shù)值,-1刪除第一個數(shù)值
{$pop:{field:value}}
1.刪除最后一個索引位置的數(shù)據(jù),后面的value用"1"
2.刪除第一位置索引的數(shù)據(jù),value=-1
$pull
push的逆向操作,刪除鍵是數(shù)組的項目中的指定元素
{$pull:{field:value}}
$pullAll
批量刪除數(shù)組中的指定元素
{$pullAll:{field:array}}
$ 數(shù)組定位器,如果數(shù)組有多個數(shù)值我們只想對其中一部分進(jìn)行操作我們就要用到定位器($)
{$push:{field:value}}
1.實例第一個是在剛剛清空的數(shù)組里面添加了兩個元素
2.我想在{“SubID”:1,"SubName":"MangoDB"}這個對象里面再添加"Teacher":"Lucy"
5.$addToSet與$each結(jié)合完成批量數(shù)組更新
理解:首先從上面的例子中我們知道,addToSet這個修改器,可以判斷是否項目存在,不存在的時候就直接插入。
此時我有一個功能,例如我想往一個存在數(shù)據(jù)的數(shù)組中批量更新數(shù)據(jù),如果存在就不更新。那么只使用addToSet是不能進(jìn)行批量的,于是就要結(jié)合$each來實現(xiàn)。
例:
1.新創(chuàng)建一個文件,并使用pushAll修改器添加數(shù)據(jù):
2.我想要批量插入"C#","PHP","JavaScript","JAVA",要求不能有重復(fù)的
如果這時候我直接用pushAll來進(jìn)行更新的話,"C#"和"JAVA"就會有重復(fù)
在shell當(dāng)中輸入如下命令:
總結(jié):以上就是MongoDB的Document的插入、刪除以及更新的使用。
原文鏈接:https://www.cnblogs.com/dcz2015/p/5238208.html
相關(guān)推薦
- 2023-05-29 Python中Merge使用的示例詳解_python
- 2022-09-19 Tomcat配置HTTPS訪問的實現(xiàn)步驟_Tomcat
- 2022-03-24 Android繪制平移動畫的示例代碼_Android
- 2022-05-29 消息隊列應(yīng)用場景介紹_其它綜合
- 2023-07-04 spring之BeanDefinition
- 2022-08-23 python實現(xiàn)GATK多線程加速示例_python
- 2022-05-31 Android調(diào)用手機攝像頭的方法_Android
- 2022-12-05 python如何在文件中部插入信息_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支