这是我的Secnario:
1 到 10 - 映射到 A
11 到 14 - 映射到 B
15 到 16 - 映射到 C
16 到 50 - 映射到 D
我需要知道输入在哪里(例如 5(? 5 的范围为 1 到 10,因此应映射到 A。
需要在莫诺戈设计这个吗?我应该如何获得数据以及我们应该如何查询?
我在这里看到两个选项:一个是一系列嵌套的$cond
,另一个是$bucket
运算符。
使用$cond
相当简单:
db.collection.aggregate([
{$project: {
category: {$cond: {
if: {$lte: ['$field', 10]},
then: 'A',
else: {$cond: {
if: {$lte: ['$field', 14]},
then: 'B',
else: ...
}}
}}
}}
])
等等。我希望你明白了。
使用$bucket
并不难,但绝对更难掌握:
db.collection.aggregate([
{$bucket: {
groupBy: '$field',
// These are exclusive on the upper bound!
boundaries: [1, 10.1, 14.1, 16.1, 50.1],
default: 'Other',
output: {
docs: {$push: '$$ROOT'}
}
}}
])
这两个输出完全不同的形状,所以你需要玩它,根据需要进行调整。