Как отсортировать по массиву значений в mongodb - PullRequest
0 голосов
/ 11 марта 2019

У меня есть коллекция Mongodb, содержащая продукты с размером, и я хочу отсортировать их в определенном порядке.

В SQL вы бы сделали SORT BY FIELD( size , 'XS', 'S', 'M', 'L'), но я не имею ни малейшего представления, как выполнить такую ​​операцию с mongodb.

1 Ответ

2 голосов
/ 11 марта 2019

К сожалению, sort(for queries)/orderBy(for aggregations) соответствует синтаксису:

<field1>: <sort order>;

Таким образом, вы не можете повторить то же поведение, что и в SQL.Решение для вас, вероятно, состоит в том, чтобы передать orderBy / sort в фильтрах и снова запросить эти результаты.

Другое решение - использовать агрегации, но вы должны указать, какие поля из продуктов вы хотите иметь вконечный результат:

db.products.aggregate( [ { $group : { _id : "$size", products: { $push: "$name" } } } ] )

Ответ будет выглядеть следующим образом:

{"_id": "L", "products": []}{"_id": "M", "products": ["a", "b"]}

Другой пример агрегации, который сначала фильтрует продукты, а затем группирует их:

 db.products.aggregate([   
   { $match: { size: { $in: ["M", "L"] } } },   
   { $group: { _id: "$size", products: { $push: {name: "$name", size:"$size"} } } }
 ]);

// { "_id" : "M", "products" : [ { "name" : "a2", "size" : "M" } ] }
// { "_id" : "L", "products" : [ { "name" : "a1", "size" : "L" }, { "name" : "a3", "size" : "L" } ] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...