在条目的愤怒中找到一个点:Mongo db



这是我的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'}
}
}}
])

这两个输出完全不同的形状,所以你需要玩它,根据需要进行调整。

最新更新