Сортировка в структуре агрегации MongoDB

Документы для MongoDB предполагают, что для сортировки результатов aggregate вы должны указать словарь/объект следующим образом:

db.users.aggregate(
    { $sort : { age : -1, posts: 1 } }
);

Предполагается сортировка по age, а затем по posts.

Что мне делать, если я хочу отсортировать по posts, а затем по age? Изменение порядка ключей, похоже, не имеет никакого эффекта, вероятно, потому, что это свойства объекта JS. Другими словами, сортировка, кажется, всегда осуществляется в соответствии с лексическим порядком ключей, что выглядит довольно странным с точки зрения дизайна...

Я что-то упускаю? Есть ли способ указать упорядоченный список ключей для сортировки?


person Assaf Lavie    schedule 07.04.2013    source источник
comment
Кажется, работает в оболочке. Вы делаете это в оболочке или в программе node.js?   -  person JohnnyHK    schedule 07.04.2013
comment
Делаем это на питоне с помощью стандартного драйвера.   -  person Assaf Lavie    schedule 07.04.2013
comment
Я предполагаю, что это всего лишь часть более сложного примера, но только этот запрос можно было бы выполнить с помощью db.users.find().sort({ age : -1, posts: 1 })   -  person xeraa    schedule 08.04.2013


Ответы (1)


Из документов:

Поскольку словари Python не поддерживают порядок, вы должны использовать SON или collections.OrderedDict, где требуется явный порядок, например, «$ sort»

from bson.son import SON
db.users.aggregate([
    {"$sort": SON([("posts", 1), ("age", -1)])}
])
person JohnnyHK    schedule 07.04.2013