首页 > 解决方案 > Pymongo 创建角色问题

问题描述

我正在使用下面的代码来创建一个新角色。

db.createRole(
    {
        createRole: "role-name",
        privileges: [
            {resource: {db: "weather_db", collection: ""},
             actions: ["insert", "update", "find", "delete"]}
        ],
        roles: [{role: "read", db: "db1"}]
    })

但是我不断收到以下错误:

NameError : name "CREATEROLE" not defined

如何解决?

标签: mongodbpymongo

解决方案


pymongo 可能会令人困惑,因为在许多方面命令语法与 mongo shell 中的命令相似或有时完全相同。

但是 pymongo 和 shell 命令并不相同。如果要使用 pymongo 版本,则需要查看pymongo 文档,尤其是管理任务。

此外,pymongo 的键值对表示为 python dicts。所以必须引用任何键,即

{"key": "value"}

并不是

{key: "value"}

从文档中没有创建角色的特定任务,但是从db.createRole 的 MongoDB 文档中它指出:

db.createRole() 方法包装了createRole命令。

并且 pymongo 确实允许您使用该db.command()方法运行命令。

最后,delete不是内置动作;你想要remove

把它们放在一起看起来像:

from pymongo import MongoClient

db = MongoClient()['admin']

db.command("createRole", "role-name",
           privileges=[{"resource": {"db": "weather_db", "collection": ""}, 
                        "actions": ["insert", "update", "find", "remove"]}],
           roles=[])

推荐阅读