我在MongoDB上做开发。出于完全无害的目的,我有时想要删除数据库中的所有内容——也就是说,删除每一个集合,以及周围可能存在的任何其他内容,然后从头开始。是否有一行代码可以让我这样做?同时提供MongoDB控制台方法和MongoDB Ruby驱动程序方法的额外好处。
当前回答
在蒙戈壳里:
use [database];
db.dropDatabase();
并删除用户:
db.dropAllUsers();
其他回答
我遵循了db.dropDatabase()路线很长一段时间,但是,如果您试图在测试用例之间使用它来删除数据库,您最终可能会发现数据库删除后索引约束没有得到尊重的问题。因此,你要么需要处理ensureIndexes,要么一个更简单的方法是避免dropDatabase,只从循环中的每个集合中删除,比如:
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
在我的情况下,我从命令行运行这个使用:
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
删除所有db使用:
for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");
do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";
done
列出所有可用的dbs show dbs 选择必要的数据库 使用 删除数据库 db.dropDatabase () //很少额外的命令 列出数据库中所有可用的集合 显示集合 删除一个规范集合 db.collection.drop ()
希望这能有所帮助
当我需要重置所有集合但又不想失去任何数据库用户时,我遇到了同样的问题。如果您想保存数据库的用户配置,请使用以下代码行:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
这段代码将遍历一个数据库中的所有集合名称,并删除不以“system.”开头的集合名称。
如果你需要立即删除所有数据库:(立即删除所有数据库)
mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
推荐文章
- MongoDB在v4之前不兼容ACID意味着什么?
- 显示所有集合中的所有内容
- MongoDB:更新一个字段上的每个文档
- 我如何在MongoDB中部分更新一个对象,以便新对象将覆盖/合并现有的一个
- MongoDB的命名约定是什么?
- MongoDB在尝试插入整数时插入浮点数
- 通过将useNewUrlParser设置为true来避免“当前URL字符串解析器已弃用”警告
- 如何查询嵌套对象?
- NoSQL (MongoDB) vs Lucene(或Solr)作为您的数据库
- 如何重命名MongoDB中所有文档的字段?
- 如何复制一个集合从一个数据库到另一个在MongoDB
- 比较mongoose _id和字符串
- MongoDB:如何将多个集合中的数据合并为一个?
- MongoDB - admin用户未授权
- 如何在MongoDB的shell中打印出超过20个项目(文档)?