【发布时间】:2020-06-20 16:50:01
【问题描述】:
我有一个有趣的场景,但我找不到干净的解决方案。
假设我有一家巧克力工厂,它根据生产的巧克力棒的数量获得等级 [A-Z] 分数。 Grades 到 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 级。
使用 Mongoose 或 MongoDB 查询,为给定的 numChocolateBars 找到合适等级的最佳方法是什么?
我目前的解决方案
我已经设法使用:
GradeMap.findOne(
{
numChocolateBars: { $gt: thisMonthsNumChocolate}
}
).Grade-1;
这基本上找到了 numChocolateBars > thisMonthsNumChocolate 的第一条记录(比我想要的高一个等级)并从中减去一个。只要我有一个 numChocolteBars 高于任何可能值的最终虚拟记录,这就会起作用。但这似乎非常不稳定,它依赖于 Mongo 搜索数据的顺序。我担心这个顺序可能会根据索引或其他因素而改变。有没有更好的办法?
【问题讨论】:
-
您可以运行
.find并解释排序/限制here -
我已经发布了示例数据。上面的csv是数据集。每行是一个特定的成绩分数。它包含一个等级字母,以及达到该等级分数所需的 numChocolateBars。 requiredChocolateForNextGrade 只是额外的数据,它显示下一个年级还有多少巧克力棒。
标签: mongodb mongoose mongodb-query