11

我对 MongoDB 和 MongoDB Compass 很陌生。

我在客户集合中有大约 1000 条记录。如何通过 MongoDB 指南针一次删除所有记录。

非常感谢,

4

2 回答 2

9

您可以使用 MongoDB 指南针提供的 Embedded Shell。它现在处于测试模式。我正在使用指南针版本1.23.0

带有 Shell 的 MongoDB 指南针

要删除多条记录,可以使用db.<collectionname>.deleteMany
https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/

于 2020-11-30T12:48:36.633 回答
1

如果您在该集合上没有索引,则可以删除整个集合,如文档中所示。

但是,如果您有索引,删除集合也会删除索引,但通常删除整个内容然后重新创建集合和索引比使用 remove( db.collection.remove({})) 删除所有文档要快得多,因为那样会逐个文档地释放它们占用的空间并删除它们在索引上的条目(如果有)。

这种方法的唯一警告是,在分片集群中,您可能会删除一个集合,即使报告删除成功,该集合仍可能存在于某些节点中,从而在重新创建它时导致问题。

您可以在https://jira.mongodb.org/browse/SERVER-17397阅读有关此OPEN问题及其解决方法的更多信息:

问题摘要

在分片集群中删除数据库/集合时,即使报告删除成功,数据库/集合仍可能存在于集群中的某些节点中。目前,我们不建议用户删除数据库或集合,然后尝试重用命名空间。

用户影响

当数据库/集合未成功删除到给定节点时,相应的文件将继续使用该节点中的磁盘空间。尝试重用命名空间可能会导致未定义的行为。

解决方法

要解决此问题,可以按照以下步骤在分片环境中删除数据库/集合:

  1. 使用mongos.
  2. 连接到每个分片的主分片并验证命名空间已被删除。如果还没有,请放弃。删除数据库(例如db.dropDatabase())会删除磁盘上要删除的数据库的数据文件。
  3. 连接到 a mongos,切换到数据库并从集合、和config中删除对已删除命名空间的任何引用:chunkslocksdatabasescollections

    删除数据库时:

    使用配置
    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" } )
    
  4. 连接到每个mongos并运行flushRouterConfig.

于 2018-05-21T12:59:03.047 回答