删除方法
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()
更多栗子后面用到再补充