У меня есть интересный сценарий, для которого я не могу найти чистое решение.
Предположим, у меня есть шоколадная фабрика, которая получает оценку степени [AZ] на основе того, сколько шоколадных плиток она производит. Отображение Grades to numChocolateBars хранится в коллекции следующим образом:
Grade, numChocolateBars, neededChocolateForNextGrade
Z, 0, 100
Y, 100, 150
X, 250, 1100
...
B, 11805606, 1228825
A, 13034431,
Примеры:
- 99 numChocolateBars получит оценку Z.
- 100 numChocolateBars получил бы оценку Y.
- 150 numChocolateBars получил бы оценку Y.
- 99999999999999999 numChocolateBars получил бы оценку A.
Используя Mon goose или запрос MongoDB, каков наилучший способ найти подходящую оценку для данного numChocolateBars?
Мое текущее решение
Мне удалось заставить работать вещи, используя:
GradeMap.findOne(
{
numChocolateBars: { $gt: thisMonthsNumChocolate}
}
).Grade-1;
Который по существу находит первую запись с numChocolateBars> thisMonthsNumChocolate (на одну ступень выше, чем я хочу) и вычитает одну из нее. Это работает до тех пор, пока у меня есть окончательная фиктивная запись с numChocolteBars, превышающим любое возможное значение. Но это кажется очень нестабильным и зависит от порядка, в котором Mon go просматривает данные. Я беспокоюсь ie этот порядок может измениться в зависимости от индексации или других факторов. Есть ли лучший способ?