在MongoDB中删除文档的4种方法

发布于

在 MongoDB 中,如果需要删除 mongo shell 中的文档,可以使用:

  • 方法db.collection.remove()
  • 命令delete
  • 方法db.collection.deleteOne()
  • 方法db.collection.deleteMany()

本文提供了每种方法的示例。

方法db.collection.remove()

该方法从集合中删除(即删除)文档。您可以根据需要删除所有文档、部分文档或单个文档。db.collection.remove()

下面是删除特定文档的示例。

db.employees.remove({ "_id": 3 })

结果:

WriteResult({ “nRemoved” : 1 })

这将从集合中删除值为 的文档。_id``3``employees

不过,它不必与单个文档匹配。过滤条件可以匹配多个文档,您甚至可以将过滤条件留空以匹配所有文档(即删除所有文档)。

下面是删除所有文档的示例:

db.employees.remove({})

结果:

WriteResult({ “nRemoved” : 5 })

结果显示我们删除了五个文档(因此在我们删除所有文档之前,集合显然包含五个文档)。

该方法还接受一个参数,以将删除限制为仅一个文档。这将删除与删除条件匹配的第一个文档。remove()``justOne

例:

db.employees.remove({}, "justOne: true")

结果:

WriteResult({ “nRemoved” : 1 })

在本例中,我们的筛选条件是空文档,因此它与集合中的所有文档匹配。但是,只删除了一个文档,因为我们使用 .justOne: true

命令delete

该命令与方法执行完全相同的操作。实际上,该方法使用 delete 命令。delete``remove()``remove()

下面是使用命令删除特定文档的示例。delete

db.runCommand(
   {
      delete: "employees",
      deletes: [ { q: { _id: 4 }, limit: 1 } ]
   }
)

结果:

{ “n” : 1, “ok” : 1 }

方法db.collection.deleteOne()

该方法与该方法类似,不同之处在于它仅从指定的集合中删除一个文档。db.collection.deleteOne()``db.collection.remove()

它接受筛选条件,就像 一样。db.collection.remove()

例:

db.employees.deleteOne({ "_id": 4 })

结果:

{ “acknowledged” : true, “deletedCount” : 1 }

这删除了员工编号 4。

如果提供返回多个文档的更广泛的筛选器,则只会删除第一个文档。

例如,无论集合中有多少个文档,下面都会删除集合中的第一个文档:

db.employees.deleteOne({})

如果您担心意外删除多个文档,该方法可能是一种方便的方法。它将删除的最多文档是一个,因此如果您犯了“胖手指”错误,您不会意外地从集合中删除所有文档(当然,除非集合中只有一个文档)。db.collection.deleteOne()

方法db.collection.deleteMany()

该方法与 类似,只是它可以删除多个文档。db.collection.deleteMany()``db.collection.deleteOne()

实际上,它可能更像 ,因为它可以删除多个文档和单个文档(尽管它没有像 do 那样的参数)。remove()``justOne``remove()

如果要删除与给定条件匹配的所有文档,此方法会很方便。

例:

db.employees.deleteMany({ "salary": { $gt: 80000 } })

结果:

{ “acknowledged” : true, “deletedCount” : 2 }

这将删除字段超过 80000 的所有文档。在这种情况下,只有两个文档匹配,但它可以是任何数字。salary

您还可以 从集合中删除所有文档。db.collection.deleteMany()

例:

db.employees.deleteMany({})

结果:

{ “acknowledged” : true, “deletedCount” : 5 }

在本例中,集合中有五个文档,所有五个文档都被删除了。

更多信息

上述方法还接受许多可选参数,例如 和 。writeConcern``collation

deleteOne()并接受论点。deleteMany()``hint

以下是每个方法/命令的MongoDB文档的链接:

  • [db.collection.remove()](https://docs.mongodb.com/manual/reference/method/db.collection.remove/ "https://docs.mongodb.com/manual/reference/method/db.collection.remove/")
  • delete
  • [db.collection.deleteOne()](https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/ "https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/")
  • [db.collection.deleteMany()](https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/ "https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/")