mongodb - MongoDB 聚合匹配结果的计数
问题描述
我正在使用一个有很多重复键的 MongoDB 集合。我定期进行聚合查询以找出这些重复项是什么,以便我可以深入了解它们的不同之处和不同之处。
不幸的是,数据库很大,重复通常是故意的。我想做的是查找具有重复项的键的计数,而不是打印具有数千行输出的结果。这可能吗?
(旁注:我通过 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
:
db.collection.aggregate([
{
$match: {
type: "example"
}
},
{
$group: {
_id: "$key",
count: {
$sum: 1
}
}
},
{
$match: {
count: {
$gt: 1
}
}
},
{
$count: "count"
}
])
推荐阅读
- docker - 如何在 mcr.microsoft.com/powershell 容器上运行“powershell”命令
- android - Android - Exoplayer 显示空白屏幕而不是播放视频
- c++ - 将赋值运算符实现为“销毁+构造”是否合法?
- c++ - 用空向量的M个元素初始化向量c ++
- php - GET http://localhost:8080/customer/src/components/manufacturer_conn.php 404(未找到)
- javascript - Uncaught SyntaxError: Unexpected end of input -- 在 PHP 中使用 onclick
- java - 从数组字符串中的最后一个元素中删除逗号
- python - 在 micro python 中连接到 Wifi 挂起
- git - 将更改从开发合并到主分支的更好方法是什么?
- css - Primeng angular 7 - css没有被应用