簡體   English   中英

如何在 MongoDB 中將對象與其值合並

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM