MongoDB: порядок по сумме двух полей

#mongodb

#mongodb

Вопрос:

 SELECT (a b) as c FROM my_table ORDER BY c ASC;
  

Как я могу упорядочить сумму по двум столбцам в Mongo?

Ответ №1:

Вы не можете сделать это легко без дополнительных действий.

Для сортировки по любому вычисленному значению вам нужно сначала сохранить его в документе или в других мирах, вам нужно создать дополнительное поле «c» и сохранять в нем a b при каждом обновлении / вставке и только затем сортировать по «c», как обычно.

Комментарии:

1. Это очень жестокое решение. 🙁

2. С точки зрения объема работы mb это выглядит жестоко, но с точки зрения производительности это всегда быстрее, чем любые вычисления.

3. Это выглядит жестоко со стороны sql 🙂

4. это дублирование данных: если скорость запроса для вас важнее, чем дисковое пространство, вы должны использовать это решение, в противном случае выберите решение mapreduce

5. @kamaradclimber: дисковое пространство стоит дешево, сокращение карты — медленный процесс, и его не рекомендуется использовать синхронно. Кстати, дублирование / денормализация данных — хорошо известный подход в мире nosql… И если возможно что-то дублировать, вы должны сначала попытаться дублировать, и только если это невозможно — используйте m / r (async). Сайт Mongodb и любая книга mongodb скажут вам то же самое..

Ответ №2:

Вы можете выполнить такой запрос:

 db.mycol.aggregate(
    [{$match:{tag:"xxx"}},
    {$project:{tag:1, count_a:1, count_b:1, factor:{$add: ["$count_a", "$count_b"]}}}, 
    {$sort:{factor:-1}}]
)