Mongoengine .. перевернуть элементы в ListField - PullRequest
1 голос
/ 03 марта 2012
class Example(Document):
    comments =  ListField(field=EmbeddedDocumentField('Comment'), db_field='z')

class Comment(EmbeddedDocument):
    comment = StringField()
    date = DateTimeField()

как я могу отменить результат поля списка комментариев по Комментарию EmbeddedDocument'date?мой неправильный код .. это как ..

Example.objects().order_by('-comments__date')

Есть ли способ отменить ListField по дате встроенного документа?или просто поменять список полей?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

В mongoDB вы возвращаете элементы, соответствующие запросу find.Так что:

Example.objects().order_by('-comments__date')

Вы просто упорядочиваете Example объекты по дате последнего комментария.Язык запросов предназначен для сопоставления, поэтому не меняет результаты / порядок возвращаемого списка.Вы можете использовать SortedListField , который гарантирует сортировку списка при сохранении, если вам нужно обеспечить порядок.Тем не менее, здесь есть возможное условие гонки, поскольку оно устанавливает весь список.Оператор $push является лучшим, но это означает, что комментарии будут стеком, а самый старый будет добавлен в конец.

Может потребоваться альтернативная схема с comments в их собственной коллекции или в mongoDB 2.2.Структура агрегации может быть использована для сортировки комментариев.

0 голосов
/ 03 марта 2012

Вы должны попробовать:

Example.objects().order_by('-comments.date')
...