我有以下文件:
{ asset : {
assetName : abc,
attributes : {
Artist : XYZ,
Duration : 10
}
}
}
{ asset : {
assetName : pqr,
attributes : {
Artist : EFG,
Duration : 5
}
}
}
{ asset : {
assetName : HIJ,
attributes : {
Artist : XYZ,
Duration : 10
}
}
}
我想按如下方式收集检索数据结果:
{ result : {
Artist: {
values : [XYZ, EFG],
freq : [2, 1]
}
Duration : {
values : [10, 5],
freq : [2, 1]
}
}
应根据频率对结果进行排序。
将使用mongoose包节点进行查询。
答案 0 :(得分:1)
您可以使用aggregation
db.collectionName.aggregate(
[
{ "$group": {
"_id":null,
"Artist": { "$push":"$asset.attributes.Artist" },
"Duration": { "$push":"$asset.attributes.Duration" }
}
},
{ "$project": { "_id":0,"Artist":1,"Duration": 1 }}
]
)
修改强>
根据新编辑的问题,您可以进行聚合以获得结果
db.collectionName.aggregate({
"$group": {
"_id": null,
"data": {
"$push": {
"artist": "$asset.attributes.Artist",
"duration": "$asset.attributes.Duration"
}
}
}
}, {
"$unwind": "$data"
}, {
"$group": {
"_id": {
"a": "$data.artist",
"b": "$data.duration"
},
"count": {
"$sum": 1
}
}
}, {
"$group": {
"_id": null,
"ArtistValues": {
"$push": "$_id.a"
},
"ArtistFreq": {
"$push": "$count"
},
"DurationValue": {
"$push": "$_id.b"
},
"durationfreq": {
"$push": "$count"
}
}
}, {
"$project": {
"Artist": {
"values": "$ArtistValues",
"freq": "$ArtistFreq"
},
"Duration": {
"values": "$DurationValue",
"freq": "$durationfreq"
},
"_id": 0
}
}).pretty()