场景
如果集合中存在
uniquekey
字段出现次数超过 1 次,则查找文档并返回特定字段。在样本数据中 uniqueKey
100 和 800 出现次数超过 1 次。
样本数据和查询可以在这里找到:
https://mongoplayground.net/p/FZ15zpXffUh
这将返回以下输出,并且计数匹配工作正常,但投影不正确
{
"_id": 100,
"count": 2
},
{
"_id": 800,
"count": 2
}
预期输出:
{
cust_name: cust_1,
uniqueKey: 100
}
{
cust_name: cust_3,
uniqueKey: 100
}
{
cust_name: cust_4,
uniqueKey: 800
}
{
cust_name: cust_5,
uniqueKey: 800
}
对于正确的聚合查询以获得预期输出的任何帮助表示赞赏。我尝试了各种聚合示例尚未找到可行的解决方案
一个简单的选择是使用
$push
:
db.collection.aggregate([
{
"$group": {
"_id": "$uniqueKey",
"count": {
"$sum": 1
},
items: {
$push: {
count: "$count",
cust_name: "$cust_name"
}
}
}
},
{
"$match": {
count: {
"$gt": 1
}
}
},
{
$unwind: "$items"
},
{
"$project": {
_id: 0,
"uniqueKey": "$_id",
"cust_name": "$items.cust_name"
}
}
])
查看它在 playground 示例中的工作原理