Сохраните одну запись из группы дубликатов с наивысшим приоритетом при удалении остальных.
Все дубликаты имеют одинаковый столбец _id (ключ).
db.mycollection.insert([
{a:1, b:2, c: "ace"},
{a:1, b:2, c:"queen"},
{a:1, b:2, c:"jack"},
{a:0, b:2, c:"king"},
{a:3, b:2, c:"queen"},
{a:2, b:2, c:"queen"},
{a:3, b:2, c:"jack"}
])
Здесь ключ - «а», а приоритет - «с».
Если значение a повторяется (дублируется), выберите значение с наивысшим приоритетом и удалите остальные дубликаты.
Я полный монго нуб, пока я только продвинулся в поиске дубликатов. Не знаю, как мне следует удалить все, кроме одного с наибольшим приоритетом.
db.list.aggregate([
{$group: {
_id: {a: "$a"},
uniqueIds: {$addToSet: "$_id"},
count: {$sum: 1}
}
},
{$match: {
count: {"$gt": 1}
}
},
]);
Ожидаемый результат:
{a:1, b:2, c: "ace"}
{a:0, b:2, c:"king"}
{a:3, b:2, c:"queen"}
{a:2, b:2, c:"queen"}
Другие записи с a = 1 были удалены, кроме той, где c = ace, то же самое для a = 3 с c = queen.
a = 0, a = 2 сохранено, нет дубликатов.