MongoDB中Drop和Remove有什么区别?

7

我看到在Mongodb中有两种删除集合的方式。我只想要彻底删除它。

我应该使用哪种方式:

db.collection.drop()

或者

db.collection.remove()

2
你尝试过阅读这些方法的文档吗?其中一个不会删除集合。 - Sergio Tulentsev
1
@Stennie,这不是同一个问题。我说的是删除整个集合,而不是逐个删除文档。 - Shai UI
@foreyez 这个重复的答案解释了这两个选项的作用:drop()会完全删除集合;而remove({})则是删除匹配的文档,同时保留(并更新)索引。如果你的目的是删除一个集合,你应该使用 drop() - Stennie
@Stennie 尽管答案相同,但问题不同,因此不应标记为重复。 - jperelli
DeprecationWarning: remove is deprecated. Use delete_one or delete_many instead. - themefield
2个回答

14

当我们将文档存储在集合中后,有两种方式可以将其全部删除。选择哪种方式完全取决于您的需求。

1. 使用 drop() 方法: 通过在集合上调用drop()方法,将删除其中所有文档,删除所有索引以及最终删除集合本身。

2.使用 remove() 方法: remove()方法有两个重载版本,一个是我们将传递条件以删除与我们传递的条件匹配的所有文档,第二个是默认情况下(2.6之前)不传递任何条件或传递一个空文档(2.6或更高版本),它将从集合中删除所有文档。在这里,我们更感兴趣的是第二个版本,当我们的意图是清除集合中的所有文档时。

备注: 为了从集合中删除所有文档,使用drop()方法删除整个集合(包括索引),然后重新创建集合并重建索引可能更加高效。


什么意思是“删除所有索引”? - Shai UI
1
索引是特殊的数据结构,它们以易于遍历的形式存储集合数据集的一小部分。索引支持在MongoDB中高效执行查询。如果没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。如果查询存在适当的索引,MongoDB可以使用索引来限制必须检查的文档数量。您可以在此处找到更多详细信息:https://docs.mongodb.com/manual/indexes/ - Ruhul Amin

5
根据文档,remove()从集合中删除文档,但不会删除集合(或相关索引)。remove()可以接受参数来指定删除条件。而drop()会删除集合和相关的索引:它从数据库中删除一个集合或视图。该方法还会删除与删除的集合相关联的任何索引。此方法提供了drop命令的包装器。详细信息请参考:https://docs.mongodb.com/manual/reference/method/db.collection.remove/https://docs.mongodb.com/manual/reference/method/db.collection.drop/。这有点像关系型SQL中DELETE(或者也许是TRUNCATE)和DROP TABLE/VIEW之间的区别。

但我使用remove()命令删除了整个集合...也许唯一的区别是remove只有条件,而drop没有或者其他什么。 - Shai UI
你确定它实际上删除了集合而不仅仅是集合中的所有文档吗?你在集合上有索引吗? - Dan Field
不确定从集合中删除“索引”是什么意思..什么索引? - Shai UI
你在该集合上创建的任何索引。我猜这意味着你没有 :) - Dan Field

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接