Python中的有序字典:添加到MongoDB

5 投票
1 回答
6010 浏览
提问于 2025-04-16 16:20

我有一个包含两个元素的元组列表,第一个元素是一个字符串(某个参数的名称),第二个元素是一个浮点数(这个参数的值)。比如说,

thelist = [('costperunit', 200), ('profit', 10000), ('fixedcost', 5000), 
           ('numpeople':300)]

实际情况中还有很多这样的元组,名称也各不相同。我想把这些作为键值对添加到mongoDB数据库里。下面是我想要添加的方式。

db.collection.insert( {paramvalues: {'costperunit':200, 'profit':10000, 
                                     'fixedcost': 5000, 'numpeople': 300} } )   

一种方法是:

dictform = dict(thelist)
db.collection.insert( {paramvalues: dictform} )

不过,这种方法不能保证参数名称和值的顺序,因为dict会改变顺序。

我试过

from collections import OrderedDict 
dictform = OrderedDict(thelist)
db.collection.insert( {paramvalues: dictform} )

这种方法保持了参数名称和值的原始顺序,但它把参数名称和值插入成了列表的列表。

我对mongoDB非常陌生,正在努力学习。请问在Python或mongoDB中有没有什么技巧可以实现我想要的?我希望在mongoDB数据库中将paramvalues的值作为字典(或JavaScript对象),这样我就可以根据某个参数的值来过滤结果。例如,我可以这样做:

db.collection.find( {'paramvalues.costperunit': 200} )

如果你确定没有办法做到这一点,请告诉我。

谢谢。

1 个回答

8

Pymongo 提供了一种字典的子类,叫做 bson.son.SON:http://api.mongodb.org/python/current/api/bson/son.html。这个子类是有顺序的,适合在需要保持顺序的情况下使用,比如发送命令的时候。

撰写回答