ani*_*nil 6 mongodb mongodb-compass
我是MongoDB和MongoDB Compass的新手。
我的客户集中有大约1000条记录。如何通过MongoDB指南针一次删除所有记录。
非常感谢,
Tar*_*han 21
您可以使用 MongoDB compass 提供的 Embedded Shell。目前处于测试模式。我使用的是指南针版本1.23.0
要删除多条记录,可以使用db.<collectionname>.deleteMany
https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/
如果您没有该集合的索引,您可以删除整个集合,如文档中所示。
但是,如果有索引,删除集合也会删除索引,但删除整个集合然后重新创建集合和索引通常比使用remove()删除所有文档要快得多db.collection.remove({}),因为这样会逐个文档地释放它们占用的空间并删除索引上的条目(如果有)。
这种方法的唯一警告是,在分片集群中,您可能会删除一个集合,即使报告删除成功,该集合可能仍然存在于某些节点中,从而在重新创建它时导致问题。
您可以在https://jira.mongodb.org/browse/SERVER-17397OPEN阅读有关此问题及其解决方法的更多信息:
问题摘要
在分片集群中删除数据库/集合时,即使报告删除成功,该数据库/集合也可能仍存在于集群中的某些节点中。目前,我们不建议用户删除数据库或集合,然后尝试重用命名空间。
用户影响
当给定节点中的数据库/集合未成功删除时,相应的文件将继续使用该节点中的磁盘空间。尝试重用命名空间可能会导致未定义的行为。
解决方法
要解决此问题,可以按照以下步骤在分片环境中删除数据库/集合:
- 使用 删除数据库/集合
mongos。- 连接到每个分片的主分片并验证命名空间是否已删除。如果还没有,请放弃它。删除数据库(例如
db.dropDatabase())会删除磁盘上正在删除的数据库的数据文件。连接到 a
mongos,切换到config数据库并从集合chunks、locks和databases中删除对已删除命名空间的所有引用collections:删除数据库时:
使用配置 db.collections.remove( { _id: /^DATABASE\./ } ) db.databases.remove( { _id: "DATABASE" } ) db.chunks.remove( { ns: /^DATABASE\./ } ) db.locks.remove( { _id: /^DATABASE\./ } )删除集合时:
使用配置 db.collections.remove( { _id: "DATABASE.COLLECTION" } ) db.chunks.remove( { ns: "DATABASE.COLLECTION" } ) db.locks.remove( { _id: "DATABASE.COLLECTION" } )连接到每个
mongos并运行flushRouterConfig。
| 归档时间: |
|
| 查看次数: |
8320 次 |
| 最近记录: |