我正在使用一个有许多重复键的MongoDB集合。我经常进行聚合查询以找出这些重复,以便我可以深入挖掘并了解它们之间的差异。
不幸的是,数据库非常庞大,重复通常是有意的。我想做的是找到具有重复键的数量,而不是打印成千上万行输出结果。这可行吗?
(附注:我所有的查询都是通过shell完成的,因此首选不需要外部工具或大量代码的解决方案,但我知道这并非总是可能的。)
示例记录:
我想要得到的结果是:
不幸的是,数据库非常庞大,重复通常是有意的。我想做的是找到具有重复键的数量,而不是打印成千上万行输出结果。这可行吗?
(附注:我所有的查询都是通过shell完成的,因此首选不需要外部工具或大量代码的解决方案,但我知道这并非总是可能的。)
示例记录:
{ "_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
{$count:"count"
}。 - s7vr