我正在尝试删除整个集合,但它不能使用下面的nodejs代码。使用命令[db.collection.remove()]
在mongodb中也是如此没有错误,但以下将事件计数返回为0
smevents.count(function(err, count) {
console.log("There are " + count + " records.");
});
删除的条目从下方显示为0 -
console.log("Removed collection entries " + collectionName + "," + removed);
使用的collectionName是从 -
获得的db.collectionNames(function(err, collections){
console.log(collections);
});
以下是代码 -
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);
});
});
}
答案 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();
});
}
]);
});