gpt4 book ai didi

python - MongoDB 不允许在 key 中使用 '.'

转载 作者:IT老高 更新时间:2023-10-28 13:07:41 64 4
gpt4 key购买 nike

我正在尝试保存包含特殊字符“.”的字典在 MongoDB 的关键部分。错误如下所示,明确指出 key 不能包含特殊字符'.'。

>>> 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”保存到数据库中?

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

最佳答案

您可以根据 sourcecheck_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 (optional): If True check if keys start with '$' or contain '.', raising :class:~pymongo.errors.InvalidName in either case.

您似乎可以使用除了两个 $. 之外的任何字符,因此前导下划线或任何其他字符都可以,并且可能是更好的选择.

常见问题解答中有关于 escaping 的信息:

In some cases, you may wish to build a BSON object with a user-provided key. In these situations, keys will need to substitute the reserved $ and . characters. Any character is sufficient, but consider using the Unicode full width equivalents: U+FF04 (i.e. “$”) and U+FF0E (i.e. “.”).

点符号常见问题解答解释了为什么使用 . 不是一个好主意:

MongoDB uses the dot notation to access the elements of an array and to access the fields of an embedded document. To access an element of an array by the zero-based index position, concatenate the array name with the dot (.) and zero-based index position, and enclose in quotes:

关于python - MongoDB 不允许在 key 中使用 '.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28664383/

64 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com