刪除方法

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()

更多栗子後面用到再補充