刪除方法
db.collection.deleteOne() |
刪除單條文件
|
db.collection.deleteMany() |
刪除多條文件 |
db.collection.remove() |
刪除單條或多條文件
|
deleteOne() 語法格式
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>,
hint: <document|string> // Available starting in MongoDB 4.4
}
)
- filter:刪除文件的條件,有點像 Mysql 的 where 條件
- hint:指定查詢的索引
deleteMany() 語法格式
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
remove() 語法格式
語法一
db.collection.remove(
<query>,
<justOne>
)
語法二
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>,
collation: <document>
}
)
引數說明
- query/filter:使用查詢運算子指定刪除條件,要刪除集合中的所有文件,傳遞一個空文件 ({}) 就行
- justOne:可選項,true,刪除第一個滿足刪除條件的文件,預設 false,刪除所有滿足條件的文件
- writeConcern:可選項,設定丟擲異常的級別(比較複雜,用到再詳解)
- collation:指定用於操作的排序規則(比較複雜,用到再詳解)
重點
刪除文件是永久性刪除,不能撤銷也不能恢復
插入資料
db.inventory.insertMany( [
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
] );
為了後面的栗子用的
刪除所有文件
db.inventory.remove({})
db.inventory.deleteMany({})
如果是 deleteOne() 只傳 {} 呢?
db.inventory.deleteOne({})
只刪除集合中第一條文件
刪除指定條件的文件
db.inventory.deleteMany({ status : "A" })
等價寫法
db.inventory.remove({status:"A"})
如果是 deleteOne() 呢?
db.inventory.deleteOne({status:"A"})
status 為 “A” 的文件有兩條,但只會刪除匹配到的第一條
條件刪除
刪除 qty 欄位值大於 50 的文件
db.inventory.remove( { qty: { $gt: 50 } }
刪除匹配 h 大於 8.5 的第一個文件
db.inventory.remove( { "size.h" : { $gt : 8.5 } } , { justOne : true } )
刪除操作的重點
- 刪除文件不會刪除索引
- 所有操作在單個文件級別上都是原子性的
以下方法也可以從集合中刪除文件
db.collection.findOneAndDelete()
db.collection.findAndModify()
db.collection.findAndModify()
db.collection.bulkWrite()
更多栗子後面用到再補充