使用pymongo将验证器添加到Mongodb集合

时间:2017-10-04 22:22:28

标签: python mongodb pymongo

我正在尝试使用pymongo为MongoDB集合添加验证器。

我希望运行的命令改编自here

等同于:

db.runCommand( {
   collMod: "contacts",
   validator: { phone: { $type: 'string' } },
   validationLevel: "moderate"
} )
{ "ok" : 1 }

如果在电话字段

中插入了非字符串数据类型,则会抛出错误

使用python我做了以下事情:

db.command({'collMod': 'contacts',
            'validator': {'phone': {'$type': 'string'}},
            'validationLevel': 'moderate'})
.
.
.
InvalidDocument: Cannot encode object: Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test_table'), 'contacts')

我确定我的python解释是错误的,但很清楚,但是我无法找到正确的翻译,或者这是否在python中是可能的

1 个答案:

答案 0 :(得分:8)

我最终在这里找到了解决方案。希望它可以帮助别人。

当然,当其他所有方法都失败时,请阅读文档...

  

.. note :: command文档中的键顺序是          有意义的(“动词”必须先出现),所以命令          需要多个密钥(例如findandmodify)          应该使用:class:~bson.son.SON或          字符串和kwargs而不是Python dict

同样有效的是OrderedDict

query = [('collMod', 'contacts'),
        ('validator', {'phone': {'$type': 'string'}}),
        ('validationLevel', 'moderate')]
query = OrderedDict(query)
db.command(query)
{'ok': 1.0}

修改

Current Documentation来自上面的地方。请注意,这是在最初回答问题后添加的,因此文档已更改,但它仍应相关