Упорядоченный словарь в Python: добавить в MongoDB - PullRequest
5 голосов
/ 24 апреля 2011

У меня есть список из двух элементарных кортежей, где первый элемент - это строка (имя некоторого параметра), а второй элемент - это число с плавающей запятой (значение этого параметра).Например,

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, которая бы достигла того, чего я хочу?Причина, по которой я хочу получить значение ключа paramvalues в базе данных Mongodb в качестве словаря (или объекта Javascript), заключается в том, что я могу затем фильтровать результаты, используя значение некоторого параметра.Например, я могу сделать:

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

Если вы уверены, что нет способа сделать это, я был бы признателен, если бы вы сообщили мне.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 24 апреля 2011

Pymongo предлагает подкласс dict, bson.son.SON: http://api.mongodb.org/python/current/api/bson/son.html, который упорядочен для случаев, когда это необходимо, например, для отправки команд.

0 голосов
/ 24 апреля 2011

Dicts в Python и массивы в Javascript / BSON (MongoDB) не упорядочены. Либо вы сохраняете какой-то явный индекс индекса сортировки как часть dict / array и выполняете сортировку на уровне приложения на этом уровне, либо вставляете свои данные в список, который, конечно, отсортирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...