如何通过mongodb和node.js删除所有集合?

我是新的node.js和mongodb,我有以下问题:我需要从我的mongodb从node.js文件中删除所有集合。 我有这样一个function:

service.dropCollections = function(db, colls){ for(var i = 0; i < colls.length; i++){ var name = colls[i].name; db.dropCollection(name, function(err) { if(!err) { console.log( name + " dropped"); } else { console.log("!ERROR! " + err.errmsg); } }); } } 

我在下面的函数中使用它:

 service.clearDB = function() { var MongoClient = require('mongodb').MongoClient , format = require('util').format; MongoClient.connect('mongodb://127.0.0.1:27017/shiny_d', function(err, db){ if(err) throw err; db.collectionNames(function(err, collections){ if(!err){ service.dropCollections(db, collections); } else { console.log("!ERROR! "+ err.errmsg); } service.showCollections(); }); }); } 

作为输出我有

!错误! ns找不到

shiny_db.physicalinfos

不知道该怎么做。 我会非常感谢你的帮助。

如果你放弃整个数据库,是不是更快,更容易,更不容易出错?

 db.dropDatabase(); 

至less从Mongo CLI中,只要你访问一个不存在的数据库,它就会在你创build数据的时候被保留下来。 这与从中删除所有集合是一样的。

除了学习外,我还没有尝试MongoDB,所以我对权限知之甚less。 所以,可能唯一的问题是删除整个数据库将是您的用户将丢失(我相信)的权限。

如果您要创build的这个脚本不是用于生产的,那么您可以放弃数据库。

我find了答案。 首先我在连接上犯了错误,应该是这样的: 'mongodb://127.0.0.1:27017/shiny_db' 。 第二个错误是以收集的名义。 这就像'db_name.coll_name' ,这就是为什么db.dropCollection(name, callback)找不到特定的集合,因为我有错误ns not found 。 所以我用下面的机制来分隔db_name和coll_name:

var name = colls[i].name.substring('shiny_db.'.length); 我已经添加了检查“系统”收集。

最终的代码如下所示:

 service.clearDB = function() { var MongoClient = require('mongodb').MongoClient , format = require('util').format; MongoClient.connect('mongodb://localhost/shiny_db', function(err, db) { if(err) throw err; db.collectionNames(function(err, collections){ if(!err){ service.dropCollections(db, collections); } else { console.log("!ERROR! "+ err.errmsg); } }); }); } service.dropCollections = function(db, colls){ for(var i = 0; i < colls.length; i++){ var name = colls[i].name.substring('shiny_db.'.length); if (name.substring(0, 6) !== "system") { db.dropCollection(name, function(err) { if(!err) { console.log( name + " dropped"); } else { console.log("!ERROR! " + err.errmsg); } }); } else { console.log(name + " cannot be dropped because it's a system file"); } } } 

希望它会帮助别人!

listCollections为您提供一个集合名称作为string的数组。

它看起来像你可能会混淆它的东西,返回一个集合对象数组可能db.collections()