您可以check_keys
根据来源将其设置为False :
test.insert(d,check_keys=False)
def insert(self, doc_or_docs, manipulate=True,
safe=None, check_keys=True, continue_on_error=False, **kwargs):
它确实可以工作:
In [28]: d = {'.aaa' : '.bbb'}
In [29]: test.insert(d,check_keys=False)
Out[29]: ObjectId('54ea604bf9664e211e8ed4e6')
该文档字符串指出:
* check_keys
(可选):如果True
检查键是否以’$’开头或包含’。’,则~pymongo.errors.InvalidName
在两种情况下都提高:class :。
你似乎可以分开使用任何字符只从两个 $
或.
因此导致下划线或任何其他字符会被罚款和可能是一个更好的选择。
常见问题解答中有关于转义的信息:
在某些情况下,您可能希望使用用户提供的密钥来构建BSON对象。在这种情况下,密钥将需要替换保留的$和。字符。任何字符都足够,但是请考虑使用Unicode全角等效项:U + FF04(即“ $”)和U + FF0E(即“。”)。
点号常见问题解释了为什么使用.
它不是一个好主意:
MongoDB使用点表示法来访问数组的元素并访问嵌入式文档的字段。要通过从零开始的索引位置访问数组的元素,请将数组名称与点(。)和从零开始的索引位置连接起来,并用引号引起来: