Вы можете сделать это с помощью поиска, но я не думаю, что он будет хорошо масштабироваться. Я бы подумал, что это нужно каким-то образом сохранить, возможно, $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}}
])