Присвоить порядковый номер полю в агрегации MongoDB - PullRequest
0 голосов
/ 19 февраля 2020

У меня агрегация MongoDB, и у каждого документа есть поле (groupNumber), подобное этому:

enter image description here

Мне нужно, чтобы у каждого groupNumber был свой номер для каждого документа (может быть инкрементным 1,2,3 ..)

Большинство найденных мной решений используют «find» , как этот , но я думаю, что это невозможно используется в агрегации.

Заранее спасибо.

1 Ответ

1 голос
/ 20 февраля 2020

Вы можете сделать это с помощью поиска, но я не думаю, что он будет хорошо масштабироваться. Я бы подумал, что это нужно каким-то образом сохранить, возможно, $out в другой коллекции, чтобы номера были стабильными, а удаление или вставка документа не изменило номера для любой другой группы.

db.target.aggregate([
    {"$lookup":{
        "from":"target",
        "as":"looked",
        "let":{"srcId":"$_id"},
        "pipeline":[
          {"$match":{"$expr":{"$lte":["$_id","$$srcId"]}}},
          {"$group":{"_id":"null", "cnt":{"$sum":1}}}
        ]
    }},
    {"$addFields":{"groupNumber":{"$arrayElemAt":["$looked.cnt",0]}}},
    {"$project":{"looked":0}}
])
...