如何使用Mongoose删除数据库?

20 浏览
0 Comments

如何使用Mongoose删除数据库?

我正在使用Node.js和Mongoose准备一个创建数据库的脚本。

我想知道如何检查数据库是否已经存在,如果存在,如何使用Mongoose删除它?

我找不到使用Mongoose删除数据库的方法。

0
0 Comments

使用Mongoose连接数据库时,如果数据库不存在,Mongoose会自动创建一个。因此,连接后可以通过查询来判断数据库是否为空。如果要删除已连接的任何数据库,可以使用mongoose.connection.db.dropDatabase()方法来实现。

有人尝试使用mongoose.connection.db.dropDatabase()方法删除数据库,但发现数据库仍然存在。原因可能是在删除数据库后,再次连接数据库时,数据库会被重新创建,但是为空。在删除数据库后,是否还有集合存在?

是否使用同一个连接,还是创建了多个连接?

有人发现dropDatabase方法应该放在connect的回调函数中调用,即mongoose.connect('...', function() { ...dropDatabase()})

在某些情况下,dropDatabase方法可能无法正常工作,但可以使用直接的Mongo命令来删除数据库,如mongoose.connection.db.executeDbCommand({dropDatabase:1}, function(err, result) { if (err) { console.log(err); } done(); });

0
0 Comments

如何使用Mongoose删除数据库?

在Mongoose中,没有直接删除集合的方法,最好的方法是删除集合中的内容:

Model.remove({}, function(err) { 
   console.log('collection removed') 
});

但是,可以通过访问MongoDB原生的JavaScript驱动程序来实现删除操作:

mongoose.connection.collections['collectionName'].drop( function(err) {
    console.log('collection dropped');
});

警告:在尝试删除操作之前,请备份数据以防出现问题!

如果尝试第二种方法出现"cannot read property 'collectionName' of undefined"的错误,可以使用以下正确的代码:

mongoose.connection.collections['collectionName'].drop( function(err) { });

感谢,这个方法有效,但在调用之前仍然需要声明模式。是否有更简单的方法呢?

由于所有的集合都在哈希mongoose.connection.collections中,你可以简单地列出它们:

for ( collection in mongoose.connection.collections ) { 
    mongoose.connection.collections[collection].drop 
} 

此外,你不需要列出模式就能从中访问你的集合,你只需要一个有效的连接,不需要进一步的mongoose.model声明!

你犯了一个错别字——在function(err)之后多了一个逗号,正确的写法是:

mongoose.connection.collections['collectionName'].drop( function(err) {     
    console.log('collection dropped'); 
});

难道只有我注意到这个答案没有解决如何删除数据库的问题吗?它并不是在问如何删除一个集合,而是在问如何删除一个数据库。

由于某种原因,我遇到了这个错误"TypeError: Cannot call method 'drop' of undefined"。不确定我做错了什么。

哦,我误点击了反对按钮,15分钟后才注意到:/你能编辑一下吗?

如果出现"cannot read property 'collectionName' of undefined"的错误,请尝试以下代码:

mongoose.connection.collection(collectionName).drop(function(err) {     
    if (err) {         
        console.log("err:", err);     
    } 
});

"在Mongoose中没有方法可以直接删除集合",首先,OP想要删除一个数据库,而不是一个集合,其次下面的答案很好地解决了问题。

0