Найти точку в ярости записей: Mongo db - PullRequest
0 голосов
/ 25 июня 2018

Вот мое Secnario:

1 до 10 - сопоставлено с A

11 до 14 - сопоставлено с B

15 до 16 - сопоставлено с C

от 16 до 50 - сопоставлено с D

Мне нужно знать, где находится вход (например, 5)?5 лежит в диапазоне от 1 до 10, следовательно, он должен быть сопоставлен с A.

Нужно спроектировать это в Monogo?Как я должен иметь данные и как мы должны запрашивать?

1 Ответ

0 голосов
/ 26 июня 2018

Здесь я вижу два варианта: один - это серия вложенных $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'}
        }
    }}
])

Эти две формы выводят совершенно разные фигуры, поэтому вам придется поиграть с ними и настроить по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...