[英]How can i merge objects with their values in MongoDB
我正在努力使用 mongodb 查詢將對象與其值合並並獲得每個房間的訪問次數,
這是存儲數據的示例:
[
{
"roomVisits": {}
},
{
"roomVisits": {}
},
{
"roomVisits": {}
},
{
"roomVisits": {}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM13": 3
}
},
{
"roomVisits": {}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM4": 5
}
},
{
"roomVisits": {
"ROOM4": 13
}
},
{
"roomVisits": {
"ROOM4": 3,
"ROOM13": 1
}
},
{
"roomVisits": {
"ROOM4": 4
}
}
]
我期望得到的:
{
"result": {
"4": 1,
"25": 1
}
}
在這種情況下,4 是同一房間的訪問次數之和,1 是有 4 次訪問的房間數。
示例 2:
[
{
"roomVisits": {
"ROOM1": 1
}
},
{
"roomVisits": {
"ROOM1": 8,
"ROOM2": 1
}
},
{
"roomVisits": {
"ROOM1": 1
}
},
{
"roomVisits": {
"ROOM3": 3
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM1": 1
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM4": 4
}
},
{
"roomVisits": {
"ROOM5": 1,
"ROOM3": 1
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM1": 4
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM3": 2
}
},
{
"roomVisits": {
"ROOM6": 3,
"ROOM3": 3
}
},
{
"roomVisits": {
"ROOM3": 6
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM1": 2,
"ROOM7": 9
}
},
{
"roomVisits": {
"ROOM7": 24,
"ROOM3": 2
}
},
{
"roomVisits": {
"ROOM3": 4,
"ROOM7": 1
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM7": 2
}
},
{
"roomVisits": {
"ROOM3": 3
}
},
{
"roomVisits": {
"ROOM6": 5,
"ROOM3": 20,
"ROOM1": 2
}
},
{
"roomVisits": {
"ROOM3": 3
}
},
{
"roomVisits": {}
},
{
"roomVisits": {
"ROOM8": 3,
"ROOM9": 3,
"ROOM10": 2,
"ROOM11": 1,
"ROOM12": 1,
"ROOM13": 1
}
},
{
"roomVisits": {
"ROOM10": 3,
"ROOM14": 2,
"ROOM9": 2,
"ROOM13": 8,
"ROOM11": 2,
"ROOM15": 1,
"ROOM8": 3,
"ROOM12": 5,
"ROOM16": 1
}
},
{
"roomVisits": {
"ROOM13": 3,
"ROOM12": 2,
"ROOM8": 1,
"ROOM10": 1
}
},
{
"roomVisits": {
"ROOM1": 2
}
},
{
"roomVisits": {
"ROOM3": 4,
"ROOM17": 3
}
},
{
"roomVisits": {
"ROOM17": 13
}
}
]
結果:
{
"result": {
"1": 4,
"2": 1,
"3": 1,
"4": 1,
"5": 1,
"6": 1,
"7": 1,
"8": 2,
"12": 1,
"16": 1,
"21": 1,
"36": 1,
"51": 1
}
}
先感謝您。
這個查詢應該可以解決問題。 我在這個 mongo 游樂場創建了它
db.collection.aggregate([
{
"$match": {
"roomVisits": {
"$ne": {}
}
}
},
{
"$addFields": {
"roomVisitsArray": {
"$objectToArray": "$roomVisits"
}
}
},
{
"$unwind": "$roomVisitsArray"
},
{
"$replaceRoot": {
"newRoot": "$roomVisitsArray"
}
},
{
"$group": {
"_id": "$k",
"visitCount": {
"$sum": "$v"
}
}
},
{
"$group": {
"_id": "$visitCount",
"visitCount": {
"$sum": 1
}
}
},
{
"$group": {
"_id": null,
"value": {
"$push": {
"k": {
"$toString": "$_id"
},
"v": "$visitCount"
}
}
}
},
{
"$replaceRoot": {
"newRoot": {
"$arrayToObject": "$value"
}
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.