为何MongoDB执行db.dropDatabase()后,db命令仍指向已删除数据库?
Why does
db still point to a dropped database in MongoDB Shell? 这其实是Mongo Shell的一个正常设计特性,不用慌!
当你执行use test切换数据库时,Mongo Shell会在本地创建一个数据库对象的引用,这个db变量本质上只是Shell当前持有的一个本地指针,它和服务器端实际存在的数据库并不是实时绑定同步的。
看你提供的操作记录:
> use test switched to db test > db.dropDatabase() { "dropped" : "test", "ok" : 1 } > db test
你执行db.dropDatabase()确实已经在服务器端彻底删除了test数据库(从后续show dbs的输出也能确认它不再存在),但Shell里的db变量依然保留着之前指向test的本地引用,所以你输入db时还是会显示test。
可以做个小验证:
如果这时候你尝试用这个db对象执行写操作,比如:
db.testCollection.insertOne({name: "demo"})
你会发现服务器端又重新创建了test数据库——这也能证明,当前的db只是个本地引用,当你用它发起数据库操作时,MongoDB服务器会自动创建不存在的数据库。
解决办法:
如果想让db指向一个实际存在的数据库,只需要重新执行use命令切换到已有的库(比如use admin),之后db就会更新为指向新的数据库了。
内容的提问来源于stack exchange,提问作者Anand Kumar
相关产品推荐
相关产品推荐

