Я работаю с коллекцией MongoDB, в которой много дубликатов ключей.Я регулярно выполняю запросы на агрегацию, чтобы выяснить, что это за дубликаты, чтобы я мог покопаться и выяснить, в чем их отличие и чем они не отличаются.
К сожалению, база данных огромна, а дубликаты часто являются преднамеренными.Я хотел бы найти count ключей, которые имеют дубликаты, вместо того, чтобы печатать результат с тысячами строк вывода.Возможно ли это?
(Примечание: я выполняю все запросы через оболочку, поэтому предпочтение отдается решениям, которые не требуют внешних инструментов или большого количества кода, но я понимаю, что это не всегда возможно.)
Пример записей:
{ "_id" : 1, "type" : "example", "key" : "111111", "value" : "abc" }
{ "_id" : 2, "type" : "example", "key" : "222222", "value" : "def" }
{ "_id" : 3, "type" : "example", "key" : "222222", "value" : "ghi" }
{ "_id" : 4, "type" : "example", "key" : "333333", "value" : "jkl" }
{ "_id" : 5, "type" : "example", "key" : "333333", "value" : "mno" }
{ "_id" : 6, "type" : "example", "key" : "333333", "value" : "pqr" }
{ "_id" : 7, "type" : "example", "key" : "444444", "value" : "stu" }
{ "_id" : 8, "type" : "example", "key" : "444444", "value" : "vwx" }
{ "_id" : 9, "type" : "example", "key" : "444444", "value" : "yz1" }
{ "_id" : 10, "type" : "example", "key" : "444444", "value" : "234" }
Вот запрос, который я использовал, чтобы найти дубликаты на основе key
:
db.collection.aggregate([
{
$match: {
type: "example"
}
},
{
$group: {
_id: "$key",
count: {
$sum: 1
}
}
},
{
$match: {
count: {
$gt: 1
}
}
}
])
, который дает мневывод:
{
"_id": "222222",
"count": 2
},
{
"_id": "333333",
"count": 3
},
{
"_id": "444444",
"count": 4
}
Результат, который я хочу получить вместо:
3