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

Dan*_*ean 8 mongodb node.js

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

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);
        }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

我在以下功能中使用它:

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();
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

作为我的输出

!错误!找不到ns

shiny_db.physicalinfos

不知道现在该做什么.我非常感谢你的帮助.

gus*_*nke 7

如果只删除整个数据库,是不是更快,更容易,更不容易出错?

db.dropDatabase();
Run Code Online (Sandbox Code Playgroud)

至少从Mongo CLI,无论何时访问不存在的数据库,它都会在您创建数据后立即保留.这与从中删除所有集合相同.

除了学习之外我还没有尝试过MongoDB,所以我对权限知之甚少.因此,丢弃整个数据库的唯一问题可能是用户的权限会丢失(我相信).

如果您尝试创建的此脚本不是用于生产,那么您最好放弃数据库.


Dan*_*ean 3

我找到了答案。首先,我在连接中犯了错误,它应该如下所示:'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");
        }    
    } 
}
Run Code Online (Sandbox Code Playgroud)

希望它能帮助别人!