mongodb - MongoDB聚合,如果存在,则查找非唯一的双字段
问题描述
我有这样的 MongoDB 集合:
{ "parentId": "5d304431fdfd02eacf7d5dce", "name": "test" }
{ "parentId": "5d304431fdfd02eacf7d5dce", "name": "test" }
{ "parentId": "5d304431fdfd02eacf7d5dce", "name": "test" }
{ "name": "test"}
{ "name": "test"}
{ "parentId": "5d02033efdfd02580e04570e", "name": "test4" }
{ "parentId": "5d02033efdfd02580e04570e", "name": "test5" }
{ "parentId": "5d02033efdfd02580e04570e", "name": "test5" }
我需要找到所有非唯一的 2 个字段值:“parentId”和“name”。但主要问题 - 有些文档没有所需字段之一(示例)。
我被困在查询中:
db.default.aggregate([
{
"$group": {
"_id": {
"parentId": "$parent",
"name": "$name"
},
"uniqueIds": {
"$addToSet": "$_id"
},
"count": {
"$sum": 1
}
}
},
{
"$match": {
"count": {
"$gt": 1
}
}
}
])
所以,我想完成:
{ "parentId": "5d304431fdfd02eacf7d5dce", "name": "test", count: "3" }
{ "parentId": "5d02033efdfd02580e04570e", "name": "test5", count: "2" }
解决方案
以下查询可以获得预期的输出:
db.default.aggregate([
{
$match:{
"parentId":{
$exists: true
},
"name":{
$exists: true
}
}
},
{
$group:{
"_id":{
"parentId": "$parentId",
"name":"$name"
},
"parentId":{
$first: "$parentId"
},
"name":{
$first: "$name"
},
"count":{
$sum: 1
}
}
},
{
$match:{
"count":{
$gt:1
}
}
},
{
$project:{
"_id":0
}
}
]).pretty()
输出:
{ "parentId" : "5d02033efdfd02580e04570e", "name" : "test5", "count" : 2 }
{ "parentId" : "5d304431fdfd02eacf7d5dce", "name" : "test", "count" : 3 }
推荐阅读
- html - 调整线性渐变路径 HTML/CSS 的宽度
- javascript - 如何使用canvasJs绘制图形?
- python - 如何继承父类的所有功能?
- dart - 在 Flutter 中使用 Stream/Sink
- django - Django:如何使用 DetailView 反转对象?
- rust - 返回包含引用的结果时“变量的寿命不够长”,但它的寿命确实足够长
- php - PHP doesnt want to send any emails from Hostinger hosting
- mysql - Flask SQL-Alchemy query is returning null for data that exists in my database. What could be the cause
- xml - Delete Duplicated Node From XML
- r - 一次将数据框中的所有 0 值替换为多行和多列的 1