簡體   English   中英

MongoDB 聚合 - 按兩個字段分組

[英]MongoDB Aggregation - Group by two fields

我已經研究過可能的重復項,但找不到。 我有一個 MongoDB 這樣的集合結構:

[
  {eui: 'abcd', date: '2023/01/23, 9:36 AM', temperature: 4.7},
  {eui: 'abcd', date: '2023/01/23, 8:31 AM', temperature: 14.3},
  {eui: 'abcd', date: '2023/01/22, 5:36 PM', temperature: 6.2},
  {eui: 'abcd', date: '2023/01/22, 3:36 PM', temperature: 5.0},
  {eui: 'fght', date: '2023/01/23, 9:36 AM', temperature: 4.9},
  {eui: 'fght', date: '2023/01/23, 8:31 AM', temperature: 1.7},
  {eui: 'fght', date: '2023/01/23, 5:36 AM', temperature: 2.8}
]

我需要按eui和按天對文檔進行分組(因此在同一天每小時匯總一次)。 此外,對於每一天,文檔必須包含當天的最高溫度、最低溫度和平均溫度。

所需的 output 是:

[
  {eui: 'abcd', date: '2023/01/23', min_t: 4.7, max_t:14.3 , avg_t: 9.5},
  {eui: 'abcd', date: '2023/01/22', min_t: 5.0, max_t: 6.2, avg_t: 5.6},
  {eui: 'fght', date: '2023/01/23', min_t: 1.7, max_t: 4.9, avg_t: 3.1},
]

等等。 所以我想要一個關於每一天/eui 對的文件。

我努力了

db.temperatures.aggregate([
  {$match: {eui: "C0EE400001030C5F"}},
  {"$group": {
    "_id": { '$dateToString': { 'format': "%Y-%m-%d", 'date': "$date", }},
    "avg_temperature": {"$avg": "$temperature" },
    "min_temperature": {"$min": "$temperature" },
    "max_temperature": {"$max": "$temperature" },
    }
  },
  {"$sort": { "_id":-1 }}
])

我成功按天分組,但我正在匹配特定的 eui,我無法按 eui 分組。

PS 我正在使用 PyMongo,因此我很想獲得在 python 包裝器中工作的東西。

謝謝。

您可以按dateeui分組。

db.collection.aggregate([
  {
    $match: {
      eui: "C0EE400001030C5F"
    }
  },
  {
    "$group": {
      "_id": {
        "date": {
          "$dateToString": {
            "format": "%Y-%m-%d",
            "date": "$date",
            
          }
        },
        eui: "$eui"
      },
      "avg_temperature": {
        "$avg": "$temperature"
      },
      "min_temperature": {
        "$min": "$temperature"
      },
      "max_temperature": {
        "$max": "$temperature"
      },
      
    }
  },
  {
    $project: {
      _id: 0,
      date: "$_id.date",
      eui: "$_id.eui",
      avg_temperature: 1,
      min_temperature: 1,
      max_temperature: 1
    }
  },
  {
    "$sort": {
      "eui": 1,
      "date": -1
    }
  }
])

演示 @ Mongo 游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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