gpt4 book ai didi

python - 如何在 pymongo 中获取有序字典?

转载 作者:IT老高 更新时间:2023-10-28 21:16:24 28 4
gpt4 key购买 nike

我正在尝试在 Pymongo 中获取有序字典。我读过它可以用 bson.son.Son 完成。文档是 Here

但是,我似乎无法让它工作。谷歌上没有太多关于它的信息。有一些关于首先配置 pymongo 以告诉它使用 SON 对象的讨论,但没有示例。一位 friend 建议您在进行查找时传递一个参数。他不记得了。

我能够创建 SON 对象。但是当它们被插入到数据库中然后又出来时,它们只是普通的字典。

我不确定该给您什么代码示例,因为我真的不知道从哪里开始。每次我添加一个新用户时,下面的代码片段都会创建一个空的 SON 对象。 'sub_users' 对象也是用 SON 创建的。当我从数据库中读取帐户文档时,它们只是普通的 python dicts。

    account['sub_users'][sub_user_name] = bson.SON()
with mongo_manager.Collection(CFG.db, 'Users') as users:
users.save(account)

也许一个参数过去可以找到这样的配置?这是我 friend 的建议,但他不记得了。

with mongo_manager.Collection(CFG.db, 'Users') as users:                                 
account = users.find_one({'_id': _id, 'DOC':'OrderedDict})

有什么想法吗?

最佳答案

上述解决方案适用于旧版本的 MongoDB 和 pymongo 驱动程序,但它不再适用于 pymongo3 和 MongoDB3+ 您现在需要将 document_class=OrderedDict 添加到 MongoClient 构造函数。修改上述答案以实现 pymongo3 兼容性。

from collections import OrderedDict
from pymongo import MongoClient
import bson

client = MongoClient(document_class=OrderedDict)
sample_db = client['sample']
test_col = sample_db['test']

test_col.drop()

data = OrderedDict([("one", 1), ("two", 2), ("three", 3), ("four", 4)])
test_col.insert(data)
print(list(test_col.find({}, {'_id': 0})))

test_col.drop()

data = bson.son.SON([("one", 1), ("two", 2), ("three", 3), ("four", 4)])
test_col.insert(data)
print(list(test_col.find({}, {'_id': 0})))

输出:

[OrderedDict([(u'one', 1), (u'two', 2), (u'three', 3), (u'four', 4)])]
[OrderedDict([(u'one', 1), (u'two', 2), (u'three', 3), (u'four', 4)])]

关于python - 如何在 pymongo 中获取有序字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001156/

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