Среднее по полю в DictField в Mongoengine

Я использую Mongoengine, и в одной коллекции у меня есть DictField(). Документы содержат записи для DictField, такие как -

{'load_time' : 134, 'show_time' : 126}

Теперь я хочу найти среднее значение load_time для DictField(). Как я могу это сделать? Функция усреднения mongoengine позволяет усреднять только поля документа.


person Siddharth    schedule 19.10.2011    source источник


Ответы (1)


Не очень хорошо знаком с MongoEngine, но... Он говорит в ссылка на API, что вы можете «использовать точечную нотацию для ссылки на встроенные поля документа»...

Подойдет ли average( "yourdictfieldname.load_time" ) для этого?

person dampier    schedule 21.10.2011
comment
Я не думаю, что это сработает. У меня сложилось впечатление, что это можно использовать, когда в документе есть EmbeddedDocument, а не DictField. В любом случае, я попробую это и дам вам знать. - person Siddharth; 23.10.2011
comment
Дерьмо. Когда я прочитал о различиях между EmbeddedDocumentField и DictField, я испугался, что это не так. :( Я полагаю, что если бы данные были достаточно структурированы, вы могли бы преобразовать этот Dict — или его часть — в поле документа, чтобы выполнить это среднее значение. Но я полагаю, что есть веская причина, по которой вы этого не сделали. что уже. - person dampier; 28.10.2011
comment
да. На самом деле я использую MongoEngine, и количество ключей в DictField на самом деле меняется и может увеличиться в будущем. И поскольку я использую mongoengine, нужно иметь предопределенную структуру (поля), которые должны быть определены заранее и не могут меняться. Следовательно, было использовано поле dict. Что ж, не найдя ответа, я закодировал логику, чтобы найти среднее значение и прочее - неэффективно, но работает. - person Siddharth; 01.11.2011
comment
@Siddharth - На самом деле то, что вы определили некоторые поля заранее, не означает, что вы не можете добавить дополнительные поля позже. MongoDB отлично справляется с этим, и вы можете определить значения по умолчанию для любых полей, которых нет в базе данных (для ваших старых данных). Если вы не установите значение по умолчанию, эти поля будут просто пустыми для любых документов, в которых их нет. - person apiguy; 23.02.2012