微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB不允许使用“” 在关键

如何解决MongoDB不允许使用“” 在关键

您可以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使用点表示法来访问数组的元素并访问嵌入式文档的字段。要通过从零开始的索引位置访问数组的元素,请将数组名称与点(。)和从零开始的索引位置连接起来,并用引号引起来:

解决方法

我正在尝试保存包含特殊字符“。”的字典。在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中。目前,我只是删除“。” 从字符串中,另一种选择是将其替换为“
_”或其他一些特殊字符。

但是,所有这些都会导致信息丢失,因为如果我有一个密钥’.aaa’和一个密钥’ aaa’,并且如果我转换了’。 输入“
”,则密钥完全相同,我丢失了一些信息。为什么Mongo不允许我将’.aaa’保存到数据库中?

任何想法如何解决这个问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。