根据优先顺序删除重复项

时间:2019-06-25 00:05:23

标签: mongodb duplicates aggregation-framework pymongo

从一堆重复中保留最高优先级的单个记录,同时删除其余记录。
所有重复项都具有相同的_id(key)列。

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”,优先级为c。 如果a的值重复(重复),则选择优先级最高的一个,然后删除其余重复项。

我是一个完整的mongo noob,到目前为止,我只进行了重复查找。不知道我该如何继续删除除优先级最高的一个以外的所有内容。

    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保留,没有重复。

0 个答案:

没有答案