Pymongo在字段名称中转义unicode字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pymongo在字段名称中转义unicode字符相关的知识,希望对你有一定的参考价值。
我有以下示例键值对存储在MongoDB(和许多类似的对):
"Cluff0eG_bibcode": 'some value'
它存储的原因是因为MongoDB不接受密钥名称中的点。到目前为止,使用 uff0e点的unicode版本没有问题,但我已经开始使用pymongo从我的数据库中提取数据,它似乎正在逃避 uff0e。因此,当我在我的代码中查看它时,它会像这样:
"Cl\uff0eG_bibcode": 'some value'
我注意到如果 uff0e在值中,它不会这样做,只有它在键中。我也没有在Mongo和我的代码之间的任何一点操纵数据。这就是我正在做的事情:
url = 'mongodb://user:passwd@host/database'
client = MongoClient(url)
db = client.get_default_database()
collection = db['my_collection']
results = collection.find().limit(1) #just grabbing any record to test
我正在寻找一些有关如何让pymongo停止在密钥名称中转义unicode字符的见解。我真的很想不必仔细检查我的所有结果并手动删除它。
您使用的上一个驱动程序可能在插入期间转义。在我的mongo shell中完成后,以下显示没有编码。
db.Junk.insert({"Cluff0eG_bibcode": "some value"})
db.Junk.find()
{ "_id" : ObjectId("5487e53c64316c4cb2442578"), "Cl.G_bibcode" : "some value" }
如此转义它会显示shell的结果。
db.Junk.insert({"Cl\uff0eG_bibcode": "some value"})
db.Junk.find()
{ "_id" : ObjectId("5487e5fc64316c4cb2442579"), "Cluff0eG_bibcode" : "some value" }
您是否直接通过shell插入数据?
键名中接受顺便点,但它们被解释为dot notation,因此被视为子文档。即。 “user._id”的键将被解释为the _id key inside the object (value) associated with the user key
{ _id: value
key1: "str_value",
key2: 12345,
user: { _id: xxx, name: xxxx}
}
两个建议。 a)为什么不使用管道,或其他一些简单但难以置信(不太可能在任何普通密钥中使用)令牌。 b)我建议破解BSON文件并为你的时髦密钥构建一个编码器/解码器。可能在这个文件中。 https://github.com/mongodb/mongo-python-driver/blob/master/bson/init.py
假设您在这里使用python 2.x,请使用unicode键:
>>> c.foo.bar.insert({u'Cluff0eG_bibcode': 'some value'})
ObjectId('5488fe8dfba52249d72069bf')
>>> doc = c.foo.bar.find_one()
>>> doc
{u'_id': ObjectId('5488fe8dfba52249d72069bf'), u'Cluff0eG_bibcode': u'some value'}
>>> for key in doc:
... print key.encode("utf-8")
...
_id
Cl.G_bibcode
以上是关于Pymongo在字段名称中转义unicode字符的主要内容,如果未能解决你的问题,请参考以下文章
Android - 我啥时候应该在 Strings.xml 资源文件中转义 unicode?