Попробуйте запрос ниже:
db.collection.aggregate([
{
$group: {
_id: "$A",
A: { $first: "$A" },
B: { $max: "$B" },
C: { $max: "$C" },
D: { $max: "$D" },
Revision: { $max: "$Revision" },
}
},
{
$project: { _id: 0 },
},
{
$group: {
_id: "",
count: { $sum: 1 },
data: { $push: "$$ROOT" }
}
}
]);
Тест: mongoplayground
Таким образом, в поле data
у вас будут актуальные документы где в качестве количества представлены номера уникальных 'A'
в коллекции.
Иначе, если вы не хотите, чтобы результат был таким, вы можете просто попробовать выполнить следующий запрос:
db.collection.aggregate([
{
$group: {
_id: "$A",
A: { $first: "$A" },
B: { $max: "$B" },
C: { $max: "$C" },
D: { $max: "$D" },
Revision: { $max: "$Revision" },
}
},
{
$project: { _id: 0 },
}
])
Тест: mongoplayground
Возвращается массив объектов, поскольку агрегация всегда возвращает курсор, который будет преобразован в массив в коде, тогда вы можете просто наберите .length
в массиве, чтобы получить общее количество, вместо использования второго этапа $group
в первом запросе, чтобы получить только общее количество, это еще один вариант.