从一堆重复中保留最高优先级的单个记录,同时删除其余记录。
所有重复项都具有相同的_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保留,没有重复。