如何使用Mongoose删除数据库?
使用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(); });
。
如何使用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想要删除一个数据库,而不是一个集合,其次下面的答案很好地解决了问题。