MongoDB官方文档

常用命令

插入数据

db.users.insert({'username': 'tankywoo', 'email': 'me@tankywoo.com', 'name': 'TankyWoo', 'password_hash': 'pbkdf2:sha1:1000$pPfqG458$6f79c72df67897b1234abcdcc4helloworldhehe'})

用户认证

目前最新的稳定版是 3.X 版本,认证这块改动还是非常大:

首先,认证机制由 MONGODB-CR 改为 SCRAM-SHA-1参考,具体看这里

创建用户的命令也变了,改用 db.createUser()

最后,用户的角色也变得非常复杂,比如针对数据库用户、数据库管理员、超级管理员等等,具体看 Built-In Roles

大致的步骤就是:

注:一个用户可以配置多个角色,比如我使用 mongo-hacker 会在 find 后读取 profile 信息,而这个信息需要 dbAdmin 角色读,所以我最后给用户 readWritedbAdmin 两个角色:

> show users
{
  "_id": "mydb.myuser",
  "user": "myuser",
  "db": "mydb",
  "roles": [
    {
      "role": "dbAdmin",
      "db": "mydb"
    },
    {
      "role": "readWrite",
      "db": "mydb"
    }
  ]
}

还可以参考这篇 博文,更详细可以看官方文档 Enable Auth

以下是 MongoDB 2.x 的用户认证相关:

首先先添加一个管理员帐号

> use admin
switched to db admin

> db.addUser("root", "123456");
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "tankywoo", "roles" : [ "root" ] }

给普通数据库添加帐号:

> use mytest
switched to db mytest

> db.addUser("tankywoo", "123456");
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "tankywoo", "roles" : [ "dbOwner" ] }

然后修改mongodb.conf,添加配置:

security:
  authorization: enabled

重启MongoDB

认证:

> db.auth('username', 'password');

: 普通用户权限(绑定到数据库),需要先use dbname切换到指定数据库,再认证。

更新整个文档

mycollection.update({'_id':mongo_id}, {"$set": post}, upsert=False)

参考:

collection增加一列

> db.coll.update({}, {$set: {'data': {}}}, false, true)
Updated 2 existing record(s) in 2ms
WriteResult({
  "nMatched": 2,
  "nUpserted": 0,
  "nModified": 2
})

参考:Add new field to a collection in MongoDB

修改某一个文档的某一列值

比如多级字典:

> db.coll.update({'_id': ObjectId('123405ff3b909e19269a381a')}, {$set: {'data': {'2016-09-24': true}}})

或者(这种比较方便):

> db.coll.update({'_id': ObjectId('123405ff3b909e19269a381a')}, {$set: {'data.2016-09-24': true}} )

参考:MongoDB: update dictionary in document

Cheat Sheet