【mongodb】增刪改mongodb文件(Document)操作,看這一篇就夠了

小耿是個程式設計師發表於2021-01-01

mongodb 增刪改文件(Document)操作<一看就會>

在MongoDB中文件是指多個鍵及其關聯的值有序地放置在一起就是文件,其實指的就是資料,也是我們平時操作最多的部分。
MongoDB中的文件的資料結構和 JSON 基本一樣。所有儲存在集合中的資料都是 BSON 格式。
BSON 是一種類似 JSON 的二進位制形式的儲存格式,是 Binary JSON 的簡稱。

新增文件

新增單一文件

insert函式

語法格式為:db.collection_name.insert(document)

save函式

用法和insert函式 一樣
舉例:
向test集合中插入單個文件
db.test.save({title:‘csdn’,description:‘中國程式設計師社群’,url:‘www.csdb.com’})

insertOne函式

在MongoDB3.2以後的版本中,提供了insertOne()函式用於插入文件。
用法同insert函式
db.collection_name.insert(document)

批量新增文件

insert函式

db.collection_name.insert([document,document,…])

save函式

用法同insert函式

insertMany函式

在MongoDB3.2以後的版本中,提供了insertMany函式用於插入文件。
語法格式
db.COLLECTION_NAME.insertMany([{},{},{},…])

通過變數新增文件

Mongo Shell工具允許我們定義變數。所有的變數型別為var型別。也可忽略變數型別。變數中賦值符號後側需要使用小括號來表示變數中的值。我們可以將變數作為任意插入文件的函式的引數。
語法格式:變數名=(<變數值>)

變數新增單一文件:
db.集合名.insert/sava/insertOne(變數名)

變數批量新增文件
變數名=([{k1:“k1”},{k2:“k2”}])
db.集合名.insert/save/insertMany(變數名)

更新文件

MongoDB通過update函式與save函式來更新集合中的文件。

save更新文件

save()函式的作用是儲存文件,如果文件存在則覆蓋,如果文件不存在則新增。save()函式對文件是否存在的唯一判斷標準是"_id"系統唯一欄位是否匹配。所以使用save()函式實現更新操作,則必須提供"_id"欄位資料。

語法:
db.集合名稱.save(<document>)

update更新文件

update()函式用於更新已經存在的文件

語法格式:

db.集合名稱.update(
	<query>,
	<update>,
	<upsert:boolean>,
	<multi:boolean>
)

引數說明:

  • query:update的查詢條件,類似sql update更新語法內where後面的內容
  • update: update的物件和一些更新的操作符
  • upsert:可選,這個引數的意思是,如果不存在update的記錄,是否插入這個document,true為插入,預設為false,不插入
  • multi:可選,mongodb預設是false,只更新找的的第一條記錄,如果這個引數為true,就把條件查出來多條記錄全部更新。只有在表示式更新語法中才可使用

update的兩種更新方式

  • 覆蓋更新
    覆蓋更新:顧名思義,就是通過某條件,將新文件覆蓋原有文件。
  • 表示式更新
    表示式更新:這種更新方式是通過表示式來實現複雜更新操作,如:欄位更新、數值計算、陣列操作、欄位名修改等。

覆蓋更新

舉例:

	db.集合名.update(
		{k1:"k1"},
		{k2:"k2",k2:"k3"}
	)

表示式更新

語法:

db.集合名稱.update(
	<query>,
	<doc_projection>,
	<upsert:boolean>,
	<multi:boolean>
)

doc_projection語法:

{
	$表示式:{具體更新規則}
}
表示式介紹:
$inc

用法:{$inc:{field:value}}
作用:對一個數字欄位的某個field增加value
示例:將name為zhangsan的學生的age增加5
命令:db.stu.update({name:“zhangsan”},{$inc:{age:5}})

$set

用法:{$set:{field:value}}
作用:把文件中某個欄位field的值設為value,如果field不存在,則增加新的欄位並賦值為value。
示例:把zhangsan的年齡設為23歲
命令:db.stu.update({name:“zhangsan”},{$set:{‘age’:23}})

$unset

用法:{$unset:{field:1}}
作用:刪除某個欄位field
示例:將zhangsan的年齡欄位刪除
命令:db.stu.update({name:“zhangsan”},{$unset:{age:1}})

$push

用法:{$push:{field:value}}
作用:把value追加到field裡。注:field只能是陣列型別,如果field不存在,會自動插入一個陣列型別
示例:給zhangsan新增別名"xiaozhang"
命令:db.stu.update({name:“zhangsan”},{$push:{“alias”:“xiaozhang”}})

$addToSet

用法:{$addToSet:{field:value}}
作用:加一個值到陣列內,而且只有當這個值在陣列中不存在時才增加。
示例:往zhangsan的別名欄位裡新增兩個別名A1、A2
命令:db.stu.update({name:“zhangsan”},{$addToSet:{“alias”:[“A1”,“A2”]}})
注意:此處加入的資料是一個資料為A1和A2的陣列物件。並不是將兩個資料依次加入alias陣列中。

$pop

用法:刪除陣列內第一個值:{KaTeX parse error: Expected 'EOF', got '}' at position 15: pop:{field:-1}}̲、刪除陣列內最後一個值:{、pop:{field:1}}
作用:用於刪除陣列內的一個值
示例:刪除zhangsan記錄中alias欄位中最後一個別名
命令:db.stu.update({name:“zhangsan”},{$pop:{“alias”:1}})

$pull

用法:{$pull:{field:_value}}
作用:從陣列field內刪除所有等於_value的值
示例:刪除zhangsan記錄中的別名xiaozhang
命令:db.stu.update({name:“zhangsan”},{$pull:{“alias”:“xiaozhang”}})

$pullAll

用法:{KaTeX parse error: Expected 'EOF', got '}' at position 20: …All:value_array}̲ 作用:用法同pull一樣,可以一次性刪除陣列內的多個值。
示例:刪除zhangsan記錄內的A1和A2別名
命令:db.stu.update({name:“zhangsan”},{$pullAll:{“alias”:[“A1”,“A2”]}})

$rename

用法:{$rename:{old_field_name:new_field_name}}
作用:對欄位進行重新命名。底層實現是先刪除old_field欄位,再建立new_field欄位。
示例:把zhangsan記錄的name欄位重新命名為sname
命令:db.stu.update({name:“zhangsan”},{$rename:{“name”:“sname”}})

刪除文件

MongoDB是通過remove()函式、deleteOne()函式、deleteMany()函式來刪除集合中的文件。

remove函式

語法格式是:

db.集合名稱.remove(
    <query>,
    <justOne:boolean>
);

引數說明:
query:要刪除的文件條件,相當於SQL語法中的where子句作用。

justOne:可選引數,布林型別,代表是否只刪除第一個匹配條件滿足的文件。預設值為false,代表刪除全部滿足匹配條件的文件。

注意:此方法已經過時,官方推薦使用deleteOne()和deleteMany()函式來實現刪除操作。且在4.0-版本中,remove()函式並不會真正的釋放儲存空間,需要使用db.repairDatabase()函式來釋放儲存空間。在4.2.1版本中,刪除函式repairDatabase()。

刪除全部:
db.集合名稱.remove({});
條件刪除:
db.集合名稱.remove({'age':10})
deleteOne函式:
db.集合名稱.deleteOne({<query>});
引數解釋:
query:要刪除的文件條件,相當於SQL語法中的where子句作用。
deleteMany函式:
語法格式:
db.集合名稱.deleteMany({<query>});
引數解釋:
query:要刪除的文件條件,相當於SQL語法中的where子句作用。

相關文章