#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}}]
)