我正在尝试使用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中是可能的
答案 0 :(得分:8)
我最终在这里找到了解决方案。希望它可以帮助别人。
当然,当其他所有方法都失败时,请阅读文档...
.. note ::
command
文档中的键顺序是 有意义的(“动词”必须先出现),所以命令 需要多个密钥(例如findandmodify
) 应该使用:class:~bson.son.SON
或 字符串和kwargs而不是Pythondict
同样有效的是OrderedDict
query = [('collMod', 'contacts'),
('validator', {'phone': {'$type': 'string'}}),
('validationLevel', 'moderate')]
query = OrderedDict(query)
db.command(query)
{'ok': 1.0}
修改强>
Current Documentation来自上面的地方。请注意,这是在最初回答问题后添加的,因此文档已更改,但它仍应相关