簡體   English   中英

在 mongo 的數組中查找平均天數

[英]Find an average day count in the array in mongo

假設我們在聚合管道中有一個數組:

{
  dates: [
    "2019-01-29",
    "2019-01-29",
    "2019-01-29",
    "2019-01-29",
    "2019-02-06",
    "2019-02-06",
    "2019-02-06",
    "2019-02-08",
    "2019-06-04",
    "2019-06-25",
    "2019-07-26",
    "2019-08-15",
    "2019-08-15",
  ]
}

如何在這樣的數組中找到平均天數?

管道的下一階段應該如下所示:

dates : {
    "2019-01-29": 4,
    "2019-02-06": 3,
    "2019-02-08": 1,
    "2019-06-04": 1,
    "2019-06-25": 1,
    "2019-07-26": 1,
    "2019-08-15": 2
}

但最終結果應該是這樣的:

avg_day_count: 1.85714285714

即平均天數。
所有天數的總和除以唯一天數。

您可以在沒有任何$group邏輯的情況下使用單個$project來實現此目的;

db.collection.aggregate([
  {
    "$project": {
      "result": {
        $divide: [
          { $size: "$dates" },
          { $size: { $setUnion: [ "$dates" ] } }
        ]
      }
    }
  }
])

會放棄;

[
  {
    "_id": ...,
    "result": 1.8571428571428572
  }
]

MongoPlayground上以交互方式檢查代碼

您需要在第二個中使用$avg運行$group兩次:

db.collection.aggregate([
    {
        $uwnind: "$dates"
    },
    {
        $group: {
            _id: "$dates",
            count: { $sum: 1 }
        }
    },
    {
        $group: {
            _id: null,
            avg_day_count: { $avg: "$count" }
        }
    }
])

蒙戈游樂場

暫無
暫無

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

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