MongoDB:如何在 MongoDB Shell 中删除集合的所有记录?

Posted

技术标签:

【中文标题】MongoDB:如何在 MongoDB Shell 中删除集合的所有记录?【英文标题】:MongoDB: How To Delete All Records Of A Collection in MongoDB Shell? 【发布时间】:2018-03-04 05:58:05 【问题描述】:

我试过了

db.users.remove(*)

虽然它返回错误,但我该如何清除所有记录?

【问题讨论】:

db.getCollection('collectionname').remove() 【参考方案1】:

使用deleteMany函数(docs):

假设您的收藏名为users

db.users.deleteMany()

deleteManyfilter 作为参数,并将 empty document 作为过滤器传递,相当于要求删除集合的所有成员。

请注意,remove 应该仍然有效,但您需要传递相同的空文档:

db.users.remove()

但是,remove 已被弃用,如果您的 mongo 安装是最新的,使用 remove 应该会导致弃用警告,指示您应该改用首选方法之一。从 1.0.7 开始:

DeprecationWarning:Collection.remove() 已弃用。使用 deleteOne, deleteMany、findOneAndDelete 或 bulkWrite。

【讨论】:

【参考方案2】:

请尝试使用以下代码从所有集合中删除所有文档,除了从“系统”开始。

use('DatabaseName');
db.getCollectionNames()
  .filter((collectionName) => collectionName.indexOf("system.") === -1)
  .forEach((collectionName) => 
    print(`Removing: $db[collectionName].count() documents from $collectionName`);
    db[collectionName].deleteMany();
  );

此代码也可以在 MongoDB 游乐场中运行。 它还将打印每个集合删除的文档数。

【讨论】:

【参考方案3】:

这是删除 MongoDB shellMongoDB Compass shell (_MongoSH) 中集合的所有记录的命令。。 p>

show dbs                                    -> to list all the database
use test-database                           -> to select the database
db.getCollection('orders').deleteMany()   -> to select the collection and deletes all the data.

或者

show dbs                     -> to list all the database
use test-database            -> to select the database
db.orders.remove()      -> to select the collection and deletes all the data.

【讨论】:

【参考方案4】:

从 cmd 中的集合中删除所有文档:

cd C:\Program Files\MongoDB\Server\4.2\bin
mongo
use yourdb
db.yourcollection.remove(   )

这个例子是为 MongoDB 4.2 制作的

【讨论】:

【参考方案5】:

要删除所有集合中的所有文档:

db.getCollectionNames().forEach( function(collection_name)  
    if (collection_name.indexOf("system.") == -1) 
        print ( ["Removing: ", db[collection_name].count(), " documents from ", collection_name].join('') );
        db[collection_name].remove(); 
    
);

【讨论】:

【参考方案6】:
db.users.count()
db.users.remove()
db.users.count()

【讨论】:

【参考方案7】:

您可以从 MongoDB 中的一个集合中删除所有文档,您可以使用以下方法:

db.users.remove()

或者,您也可以使用以下方法:

db.users.deleteMany()

关注以下 MongoDB documentation,了解更多详情。

要从集合中删除所有文档,请将空过滤器文档 传递给 db.collection.deleteMany()db.collection.remove() 方法。

【讨论】:

【参考方案8】:

remove() 的参数是一个过滤文档,因此传入一个空文档意味着“全部删除”:

db.user.remove()

但是,如果您确实要删除所有内容,可能最好还是删除该集合。虽然这可能取决于您是否在集合上有用户定义的索引,即在删除集合后准备集合的成本是否超过 remove() 调用与 drop() 调用的较长持续时间。

更多详情in the docs.

【讨论】:

remove 现在已弃用。改用db.user.deleteMany() @MahdiehShavandi 查看 Mongo shell 文档我看不到任何说 remove 已弃用 (docs.mongodb.com/manual/reference/method/db.collection.remove)。您能否提供链接或引用来支持该声明? 对不起,我最好说:它会在未来的版本中被弃用。它只是在终端中记录此声明。 弃用警告:Collection.remove() 已弃用。使用 deleteOne、deleteMany、findOneAndDelete 或 bulkWrite。

以上是关于MongoDB:如何在 MongoDB Shell 中删除集合的所有记录?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB shell 介绍

怎么启动mongodb shell

怎么使用mongodb shell

如何在 mongodb shell 中查看分片键?

javascript forEach() 函数如何在 mongodb shell 中迭代文档?

如何列出 MongoDB shell 中的所有集合?