MongoDB文档翻译-CRUD操作-删除文档。
删除文档
删除方法
MongoDB提供了以下方法删除集合中的文档:
db.collection.remove() | 删除单个或所有匹配指定过滤器的文档 |
---|---|
db.collection.deleteOne() | 最多删除一个匹配的文档。版本3.2新增 |
db.collection.deleteMany() | 删除所有匹配的文档。版本3.2新增 |
可以指定约束条件/过滤器指定要删除的文档。这个过滤器使用同读操作同样的语法:
一个查询过滤文档,用
{
: , ... }
查询过滤文档可以使用查询操作符来指定条件,形式如下:
{
: {
: }
, ... }
删除行为
索引
删除操作不会删除索引,即使从一个集合中删除所有文档。
原子
MongoDB中,在单个文档级别,所有的写操作都是原子的。关于MongoDB和原子的更多信息,请参考**原子和事务。
示例集合
该篇文档举了几个在mongoshell中删除文档的操作。要填充下面例子中用到的users集合,在mongoshell中运行:
>
注意:
如果users集合已经包含了相同_id的集合,插入文档前需要删除该集合(db.users.drop())db.users.insertMany( [ {
_id: 1, name: "sue", age: 19, type: 1, status: "P", favorites: {
artist: "Picasso", food: "pizza" }
, finished: [ 17, 3 ], badges: [ "blue", "black" ], points: [ {
points: 85, bonus: 20 }
, {
points: 85, bonus: 10 }
] }
, {
_id: 2, name: "bob", age: 42, type: 1, status: "A", favorites: {
artist: "Miro", food: "meringue" }
, finished: [ 11, 25 ], badges: [ "green" ], points: [ {
points: 85, bonus: 20 }
, {
points: 64, bonus: 12 }
] }
, {
_id: 3, name: "ahn", age: 22, type: 2, status: "A", favorites: {
artist: "Cassatt", food: "cake" }
, finished: [ 6 ], badges: [ "blue", "red" ], points: [ {
points: 81, bonus: 8 }
, {
points: 55, bonus: 20 }
] }
, {
_id: 4, name: "xi", age: 34, type: 2, status: "D", favorites: {
artist: "Chagall", food: "chocolate" }
, finished: [ 5, 11 ], badges: [ "red", "black" ], points: [ {
points: 53, bonus: 15 }
, {
points: 51, bonus: 15 }
] }
, {
_id: 5, name: "xyz", age: 23, type: 2, status: "D", favorites: {
artist: "Noguchi", food: "nougat" }
, finished: [ 14, 6 ], badges: [ "orange" ], points: [ {
points: 71, bonus: 20 }
] }
, {
_id: 6, name: "abc", age: 43, type: 1, status: "A", favorites: {
food: "pizza", artist: "Picasso" }
, finished: [ 18, 12 ], badges: [ "black", "blue" ], points: [ {
points: 78, bonus: 8 }
, {
points: 57, bonus: 7 }
] }
])
删除所有文档
要从集合中删除所有文档,传递一个空过滤文档{}给db.collection.deleteMany()或db.collection.remove()方法。
db.collection.deleteMany()
下面的例子使用db.collection.deleteMany()方法从users集合中删除所有文档:
db.users.deleteMany({
}
)
该方法返回一个文档,包含操作状态:
{
"acknowledged" : true, "deletedCount" : 7 }
欲知更多信息和例子,查看db.collection.deleteMany()。
db.collection.remove()
以下例子使用db.collection.remove()方法从users集合中删除所有文档:
db.users.remove({
}
)
要从集合中删除所有文档,用db.collection.drop()方法效率可能会更高,该方法不仅删除整个集合,而且连索引也一起删除,然后重新创建集合,重建索引。
删除匹配条件的所有文档
要删除匹配删除条件的所有文档,传递一个过滤器参数给db.collection.deleteMany()方法或db.collection.remove()方法。
db.collection.deleteMany()
下面的例子用db.collection.deleteMany()从users集合中删除status字段等于”A”的所有文档:
db.users.deleteMany({
status : "A" }
)
该方法返回一个文档,包含操作状态:
{
"acknowledged" : true, "deletedCount" : 3 }
db.collection.remove()
以下例子使用db.collection.remove()方法从users集合中删除status字段等于”P”的所有文档:
db.users.remove( {
status : "P" }
)
对于大量的删除操作,先把想留在集合中的文档复制出来,然后用db.collection.drop()删除整个集合可能会更有效率。
只删除匹配条件的一个文档
若需要最多删除一个匹配的文档,即使可能多个文档匹配指定的过滤器,使用db.collection.deleteOne()方法或把
db.collection.deleteOne()
下面的例子用db.collection.deleteOne()方法来删除status字段是”D”的第一个文档:
db.users.deleteOne( {
status: "D" }
)
db.collection.remove()
下面的例子使用db.collection.remove()方法,把
db.users.remove( {
status: "D" }
, 1)