mongoclient删除集合nodejs

时间:2014-07-11 19:08:51

标签: node.js mongodb node-mongodb-native

我正在尝试删除整个集合,但它不能使用下面的nodejs代码。使用命令[db.collection.remove()]

在mongodb中也是如此
  1. 没有错误,但以下将事件计数返回为0

    smevents.count(function(err, count) {
        console.log("There are " + count + " records.");
    });
    
  2. 删除的条目从下方显示为0 -

    console.log("Removed collection entries " + collectionName + "," + removed);
    
  3. 使用的collectionName是从 -

    获得的
    db.collectionNames(function(err, collections){
        console.log(collections);
    });
    
  4. 以下是代码 -

    function removeMongoDBCollection(db, collectionName, callback) {
    
        console.log('collectionname ' + collectionName);
    
        db.collectionNames(function(err, collections){
            console.log(collections);
        });
    
        db.collection(collectionName, {}, function(err, smevents) {
    
            console.log('Error Getting collection ' + err);
    
            smevents.count(function(err, count) {
                console.log("There are " + count + " records.");
            });
    
            smevents.remove({}, function(err, removed) {
    
                console.log('Error Removing collection ' + err);
                console.log("Removed collection entries " + collectionName + "," + removed);
    
                db.close(); 
                callback(err);
            });
        });
    }
    

1 个答案:

答案 0 :(得分:0)

你好像错过了回调的概念,因为所有的方法都是异步的,你需要等待它们完成才能继续前进。例如,您的“计数”方法不一定在“删除”之前发生,因为您还没有等待它完成。

async模块可以帮助您避免在回调中嵌套方法时出现“缩进蠕变”。下面是对async.waterfall的逻辑的一般修改,以帮助传递获得的变量。

请注意,在函数实现和演示流程中,当操作完成时,您通过触发回调来“继续”到下一个“任务”:

var async = require('async'),
    mongo = require('mongodb');
    MongoClient = mongo.MongoClient;


// Function implementation
function removeCollection(db,collectionName,callback) {

  async.waterfall([

    // Get collection
    function(cb) {
      db.collection(collectionName,function(err,collection) {
        if (err) throw err;
        cb(null,collection);
      });
    },

    // Count collection current
    function(collection,cb) {
      collection.count(function(err,count) {
        console.log(
          "%s collection has %s documents",
          collectionName,
          count
        );
        cb(null,collection);
      });
    },

    // Remove collection documents
    function(collection,cb) {
      collection.remove({},function(err,removed) {
        console.log(
          "%s collection removed %s documents",
          collectionName,
          removed
        );
        cb(null,collection);
      });
    },

  ],function(err,collection) {

    collection.count(function(err,count) {
      console.log(
        "%s collection now has %s documents",
        collectionName,
        count
      );
      callback(err);
    });

  });
}

// Main flow after connection
MongoClient.connect('mongodb://localhost/test',function(err,db) {

  if (err) throw err;

  async.waterfall([

    // Set up a collection
    function(cb) {
      var collectionName = "sample";

      db.collection(collectionName,function(err,collection) {
        cb(null,collection,collectionName);
      });
    },

    // Insert some things
    function(collection,collectionName,cb) {
      async.eachSeries([1,2,3,4,5,6,7,8],function(item,complete) {
        collection.insert({ "item": item },function(err) {
          if (err) throw err;
          complete();
        });
      },function(err) {
        // When all are complete
        cb(null,collectionName);
      });
    },

    // Call your remove method
    function(collectionName,cb) {

      removeCollection(db,collectionName,function(err) {
        if (err) throw err;

        cb();
      });

    }

  ]);

});