在大量条目中找到一个要点:Mongo db

时间:2018-06-25 09:22:29

标签: mongodb

这是我的Secnario:

1到10-映射到A

11到14-映射到B

15到16-映射到C

16到50-映射到D

我需要知道输入在哪里(例如说5)? 5位于1到10的范围内,因此应将其映射到A。

需要在Monogo中设计吗?我应该如何获得数据以及如何查询?

1 个答案:

答案 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'}
        }
    }}
])

这两个输出的形状完全不同,因此您必须使用它并根据需要进行调整。