首页 > 代码库 > MongoDB笔记

MongoDB笔记

Mongodb 笔记

前几天在自己电脑里下了个新版本的mongodb 2.6 的版本,当进行用户授权认证的时候,添加用户命令db.addUser({"myname":"mypass"}) 居然提示我addUser这个方法不存在。
官网查了下,原来方法改了,有点小坑啊。

mongodb 自2.6版本起,由db.createUser()db.updateUser() 代替以前的 db.addUser().
而,新的用户添加函数里多了个角色roles的参数。

再来说说设置超级管理的步骤:

mongodb 的管理员分每个数据库的管理员和超级管理员(admin里的)
设置超级管理员步骤:

  1. 启动mongod 的时候加上参数 –auth ,登录后切换到admin库下。

  2. db.createUser({"user":"rootname","pwd":"rootpwd","roles":["root"]});

  3. 然后退出,重新登录mongo 并带上 -u -p 参数 并且指定admin库

    例如:./mongo -uroot -p123 localhost/admin

这里的roles里可以是数组,可以包含json,一般指定在某个数据库才拥有的角色:

eg:
use mydb
db.createUser({"user":"rootname","pwd":"rootpwd","roles":[{"rolename":"onlyinthisdb"},"root"]})

这里的意思是 在当前数据库中是 root 身份,在onlyinthisdb 这个数据库中是 rolename 身份。
具体的其他角色名称以及其权限范围详见官网,划分的挺细,也可以自定义角色。

管理员登录时必须选择数据库,经过数据库来验证用户,admin里的超级管理员虽然是超级管理员但是验证环节是在admin库里来完成的。db.auth({"root","123"}) 所以超级管理员登录的时候也必须选择数据库为admin

mongodb 优化

分页:因为db.mongodb.find({field:xxx}) 比较快,所以分页的时候,用 db.article.find().limit(articles_of_each_page),并记录最后一篇文章的_id(或其他排序值),之后查询 db.article.find({_id:{$lt:_id_stored}}).limit(articles_of_each_page) ,来查找下一页或者类似的上一页文章,可以避免大量计数。

MongoDB笔记