MongoDB聚合查询;:查找计数大于1的文档

问题描述 投票:0回答:1

场景

如果集合中存在

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
}

对于正确的聚合查询以获得预期输出的任何帮助表示赞赏。我尝试了各种聚合示例尚未找到可行的解决方案

aggregation-framework
1个回答
0
投票

一个简单的选择是使用

$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 示例中的工作原理

© www.soinside.com 2019 - 2024. All rights reserved.