如何使用mongodb获取重复键的数量?

时间:2014-12-05 08:29:25

标签: mongodb

我有以下Json结构 -

[{
 cName:"A",
"datastores" : [ 
    {
        "status":"unused"
    }, 
    {
        "name" : "datastore1",
         "status":"used"
    }, 
    {
        "name" : "onNetApp7m",
         "status":"used"
    }, 
    {
        "name" : "datastore1",
         "status":"used"
    }
    ],
},
{
 cName:"B",
"datastores" : [ 
    {
        "name" : "dsn",
         "status":"used"
    }, 
    {
        "name" : "dsn",
         "status":"used"
    }, 
    {
        "name" : "datastore2",
         "status":"used"
    }
    ],
}
]

我想从数组/列表“ds”中只查找其计数大于1的名称。 我想要关注输出 -

[{
"cName":"A",
"name" : "datastore1",
"count": 2
},
{
"cName":"B",
"name" : "dsn",
"count": 2
}]

目前,为了获得计数,我在我的代码逻辑中处理它。 是否可以使用mongo ??

从查询本身获取计数

1 个答案:

答案 0 :(得分:1)

您需要汇总如下:

  • Unwind datastores数组。
  • Group cNamedatastores名称字段的记录。 获取每组中的count条记录。
  • 我们需要匹配的group现在是具有count > 1
  • 的群组
  • Project必填字段。

代码:

db.collection.aggregate([
{$unwind:"$datastores"},
{$group:{"_id":{"cName":"$cName","name":"$datastores.name"},"count":{$sum:1}}},
{$match:{"count":{$gt:1}}},
{$project:{"_id":0,"cName":"$_id.cName","name":"$_id.name","count":1}}
])