我在MongoDB上做开发。出于完全不邪恶的目的,我有时想清除数据库中的一切--也就是说,删除每一个集合,以及其他可能存在的东西,然后从头开始。是否有一行代码可以让我这样做?如果能同时提供MongoDB控制台方法和MongoDB Ruby驱动方法,则可获得奖励。
我遵循db.dropDatabase()
路线很长时间了,然而如果你'试图在测试用例之间用这个来擦拭数据库,你最终可能会发现数据库删除后索引约束不被尊重的问题。
因此,你需要使用 ensureIndexes 来解决这个问题,或者一个更简单的方法是完全避免 dropDatabase,而只是在循环中从每个集合中删除,例如:{{{7298668}}。
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
在我的例子中,我是在命令行中使用。
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
通过整理@Robse和@DanH的答案(赞一个!),我'得到了以下完全令我满意的解决方案。
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
连接到你的数据库,运行代码。
*它通过删除用户集合和清空系统集合来清理数据库。
如果你只想删除一个数据库和它的子集,就用这个方法。
使用<数据库名称>;
。db.dropDatabase();
。如果你想删除mongo中的所有数据库,那么就用这个方法。
db.adminCommand("listDatabases").databases.forEach(function(d)
{
if(d.name!="admin" && d.name!="local" && d.name!="config")
{
db.getSiblingDB(d.name).dropDatabase();
}
}
);
我更喜欢
db.your_collection.remove({})
在...上
db.your_collection.drop()
如果你的藏品是特殊藏品
即一个[封顶的集合][1]或一个有一个字段被标记为唯一的集合,放弃将清除集合本身,当再次创建集合时,它将是一个普通的集合。
你将不得不再次定义属性。
所以使用remove()
来清除文档,而不会删除集合,影响集合的行为。
[1]: https://docs.mongodb.com/manual/core/capped-collections/
针对Meteor开发者.。
打开第二个终端窗口,同时在localhost:3000
中运行你的应用程序。
在你的项目'的文件夹中运行,meteor mongo
。
coolName = new Mongo.Collection('yourCollectionName');
。
然后简单地输入db.yourCollectionName.drop();
。
你'会自动在你的本地服务器中看到变化。
对于其他人来说。
db.yourCollectionName.drop();
。
在MongoDB 3.2及更新版本中,mongo
shell中的Mongo().getDBNames()
将输出服务器中的数据库名称列表。
> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]
> show dbs
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
在数组上的forEach()
循环可以调用dropDatabase()
来放弃所有列出的数据库。
也可以选择跳过一些不想放弃的重要数据库。
例如:{{{7298677}}。
Mongo().getDBNames().forEach(function(x) {
// Loop through all database names
if (['admin', 'config', 'local'].indexOf(x) < 0) {
// Drop if database is not admin, config, or local
Mongo().getDB(x).dropDatabase();
}
})
示例运行。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
> Mongo().getDBNames().forEach(function(x) {
... if (['admin', 'config', 'local'].indexOf(x) < 0) {
... Mongo().getDB(x).dropDatabase();
... }
... })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB