我有以下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 ??
从查询本身获取计数答案 0 :(得分:1)
您需要汇总如下:
Unwind
datastores
数组。Group
cName
和datastores
名称字段的记录。
获取每组中的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}}
])