我正在试图保存一个字典,其中包含MongoDB的关键部分中的特殊字符“.”。下面显示的错误清楚地表明密钥不能包含特殊字符“.”。
>>> import pymongo
>>> client = pymongo.MongoClient('localhost')
>>> db = client['malware']
>>> test = db['test']
>>> d = {'.aaa' : '.bbb'}
>>> test.insert(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 362, in insert
self.database.connection)
bson.errors.InvalidDocument: key '.aaa' must not contain '.'
但我当前的信息在数据的关键部分包含“.”,我需要将其存储到MongoDB。目前我正在删除字符串中的“.”,另一个选项是用“\u”或其他特殊字符替换它。
然而,所有这些都会导致信息丢失,因为如果我有一个键“.a a a”和一个键“aaa”,并且如果我将“.”转换为“”,那么这些键完全相同,我会丢失一些信息。为什么Mongo不允许我将“.aaa”保存到数据库中?
有什么办法解决这个问题吗?
根据source,可以将
check_keys
设置为False:它确实有效:
docstring声明:
您似乎可以使用除两个
$
或.
之外的任何字符,因此前导下划线或任何其他字符都很好,可能是更好的选择。常见问题解答中有关于escaping 的信息:
点符号faq解释了为什么使用
.
不是一个好主意:不能使用“.aaa”作为密钥,因为Mongo使用点来引用nested documents。
如果要使键看起来像点,可以使用类似于
\u002E
的unicode等效键:不过,我建议你选择另一个角色并接受它作为平台的“限制”。
相关问题 更多 >
编程相关推荐