@rshruslan

Как в MongoDB сделать сортировку по формуле?

Есть задача
Есть в базе данных 10к айтемов, у которых есть цены 7 сервисов.
Нужно при выборе двух сервисов найти самые выгодные по формуле.
Но тут возникает вопрос - как лучше сделать без костылей?
Можно ли как-то запросом сделать или как лучше?
Пока мой вариант - получать все айтемы, перебирать, считать и возвращать самые выгодные 100
В бд не получится хранить поле с процентом (он считается по формуле), т.к тогда будет 49 полей таких, ибо 7 сервисов могут взаимодействовать друг с другом в обе стороны.
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 2
hzzzzl
@hzzzzl
посмотри addFields, можно сделать еще одно поле, где всё посчитать "по формуле", и потом уже типа sort: { newField: -1 }

https://docs.mongodb.com/manual/reference/operator...

db.scores.aggregate( [
   {
     $addFields: {
       totalHomework: { $sum: "$homework" } , // сумма массива
       totalQuiz: { $sum: "$quiz" }  // сумма массива
     }
   },
   {
     $addFields: { totalScore:
       { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } } // два новых поля + одно старое
   }
] )


хотя это конечно расплывчатый ответ, но и из вопроса непонятно, как что считать, если average то наверняка можно и проще
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
хранимые процедуры
Но как я понял из ряда ответов (раз, два)на вопросы похожие на ваш их использование крайне нежелательно, является устаревшим, препятствует масштабированию, может существенно замедлять монгу, требует прав администратора монги.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы