如何使用MongoDB指南针删除MongoDB中集合中的选定多条记录

时间:2018-05-21 12:29:32

标签: mongodb mongodb-compass

我是MongoDB和MongoDB Compass的新手。

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

非常感谢,

2 个答案:

答案 0 :(得分:1)

如果您没有该集合上的索引,则可以删除整个集合,如docs所示。

但是,如果你有索引,删除集合也会删除索引,但删除整个事件然后重新创建集合和索引比删除所有文档({{1因为必须逐个文档释放它们占用的空间并删除它们在索引上的条目(如果有的话)。

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

您可以在https://jira.mongodb.org/browse/SERVER-17397了解有关此db.collection.remove({})问题及其解决方法的更多信息:

  

问题摘要

     

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

     

USER IMPACT

     

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

     

<强> WORKAROUNDS

     

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

     
      
  1. 使用OPEN删除数据库/集合。
  2.   
  3. 连接到每个分片的主分区,并验证命名空间是否已被删除。如果还没有,请放弃它。删除数据库(例如mongos)会删除磁盘上要删除的数据库的数据文件。
  4.   
  5. 连接到db.dropDatabase(),切换到mongos数据库,并从集合configchunks,{{1}中删除对已删除命名空间的任何引用}和locks

         

    删除数据库时

    use config
    db.collections.remove( { _id: /^DATABASE\./ } )
    db.databases.remove( { _id: "DATABASE" } )
    db.chunks.remove( { ns: /^DATABASE\./ } )
    db.locks.remove( { _id: /^DATABASE\./ } )
    
         

    放弃收藏时:

    use config
    db.collections.remove( { _id: "DATABASE.COLLECTION" } )
    db.chunks.remove( { ns: "DATABASE.COLLECTION" } )
    db.locks.remove( { _id: "DATABASE.COLLECTION" } )
    
  6.   
  7. 连接到每个databases并运行flushRouterConfig

  8.   

答案 1 :(得分:1)

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

MongoDB compass with Shell

要删除多个记录,可以使用field stuff type tensor<float>(x{}) { indexing: summary |attribute }
https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/