Удалить дубликаты на основе порядка приоритетов - PullRequest
0 голосов
/ 25 июня 2019

Сохраните одну запись из группы дубликатов с наивысшим приоритетом при удалении остальных.
Все дубликаты имеют одинаковый столбец _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 сохранено, нет дубликатов.

...