mongo建库查看为空
今天是国际睡眠日,所以文章不长,好珍惜你、我、他的时间
每周一坑的专题最近很少写了,今天遇到真的是坑!是关于一个mongo建了新库后为空的诡异现象。。。
对mongo稍微有点了解的人(说的是我,对mongo的认识仅限于一些基本操作),都知道mongo创建新库和授权用户的流程,我大概贴下模板:
use mondb_0321; db.createUser({ user:"用户名", pwd:"用户名密码", customData: { description:"ljy的测试mongo库" }, roles:[ { role:"readWrite", db:"mondb_0321" }, { role:"dbOwner", db:"mondb_0321" } ] })
mongo跟mysql相比,比较神奇的一点是:use db; 这个不仅是切换到db库,还含有一个不存在即创建该库的含义;而对于mysql来说仅仅表示切换,如果创建则要显式声明:create database db来创建,然后切换到新库之后,再创建用户和授权。mongo正常执行成功后,理应会返回“Successfully added user” 的提示。
当时我为了确认是否创建成功,就运行:"show db;" 来查看,奇怪的是,看不到这个新创建的 mondb_0321 的空库。
先交代下,我用的是:mongo 3.4.7 的版本,为啥我强调空库,因为建一个有数据的库,我没测过,所以不乱下判断。但上面的指令确实是建一个空库,这没错吧?
当时我有怀疑过命令不对,跟某强确认说流程没错,于是反复建库删库、建用户、删用户,切换到admin库,查询所有关于该新建的用户的授权,类似这样
use admin; db.auth("admin", "admin的密码"); db.system.users.find({user:'用户名'})
确实能查到 ”_id“ 为 “mondb_0321.用户名","db" 为“mondb_0321” 的记录,而且,用mongo客户端连接工具(MongoDBCompass、Studio 3T)输入账号、密码、连接mongo的IP和端口、及所在的库(mondb_0321)也没报连接错误
最后查到网上也有人遇到这种情况,参考:https://www.nhooo.com/note/qa0sq2.html
说如果建一个空库,需要插入一条数据才能看到新建的库,还真的是!
运行:
use mondb_0321; db.check.insertOne({"ClientName":"John"})
## 之后就能看到 mondb_0321的库 show dbs;
最后给个彩蛋,mongo删库删用户的流程(高手请绕路~)
use mondb_0321 db.dropUser('用户名') db.dropDatabase()