我是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
不知道现在该做什么.我非常感谢你的帮助.
如果只删除整个数据库,是不是更快,更容易,更不容易出错?
db.dropDatabase();
Run Code Online (Sandbox Code Playgroud)
至少从Mongo CLI,无论何时访问不存在的数据库,它都会在您创建数据后立即保留.这与从中删除所有集合相同.
除了学习之外我还没有尝试过MongoDB,所以我对权限知之甚少.因此,丢弃整个数据库的唯一问题可能是用户的权限会丢失(我相信).
如果您尝试创建的此脚本不是用于生产,那么您最好放弃数据库.
我找到了答案。首先,我在连接中犯了错误,它应该如下所示:'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)
希望它能帮助别人!