这是我的Secnario:
1到10-映射到A
11到14-映射到B
15到16-映射到C
16到50-映射到D
我需要知道输入在哪里(例如说5)? 5位于1到10的范围内,因此应将其映射到A。
需要在Monogo中设计吗?我应该如何获得数据以及如何查询?
答案 0 :(得分:0)
我在这里看到两个选项:一个是一系列嵌套的$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'}
}
}}
])
这两个输出的形状完全不同,因此您必须使用它并根据需要进行调整。