簡體   English   中英

如何在 PyMongo Aggregate 中使用日期字符串按年份排序

[英]How to sort by year using a date string in PyMongo Aggregate

我和另一位程序員在這個問題上兜圈子,似乎無法在網上找到答案。

我們有一個 MongoDB 集合,其中插入了從 API 中提取的文檔。 每個文檔都有一個名為attributes.created的字段,它是一個字符串。

字符串的格式是這樣的:“2019-04-25T07:06:02Z”

我們的目標是每年獲得一份計數清單。 我們可以在一個不同的集合上執行此操作,該集合只有一個 int 值的年份......但我們無法在這里弄清楚,因為我們需要將字符串轉換為日期。

我們的聚合 function 的示例是:

publicationsByYear = collection.aggregate([
         {"$group": {"_id" : { $dateFromString: { "dateString": "attributes.created", "format": "%Y-%m-%d %H:%M:%S" }}, "num_publications": {"$sum": 1}}}
])

我們也試過用 $toDate 代替 $dateFromString,但結果是一樣的。 無論我們嘗試什么,我們似乎都會遇到相同的兩個錯誤之一:

  1. 解析日期時出錯,找不到四位數的年份。 (這是上面代碼拋出的錯誤)
  2. 不允許將時區標識符作為字符串的一部分傳遞。 (如果我們刪除 'format' 參數和默認格式的 go,則會拋出此問題)。

我們已經嘗試使用不同的格式參數值 $toDate 和 $dateFromString 的各種用法,但我們得到了相同的錯誤。 我們還嘗試了各種格式規范,但似乎無法正確處理。

我們缺少什么?

使用$dateFromString運算符,

  • 通過$dateFromString將該字符串日期轉換為日期類型
  • $year從上述轉換日期獲取年份
publicationsByYear = collection.aggregate([
  {
    $group: {
      _id: {
        $year: { $dateFromString: "$attributes.created" }
      },
      num_publications: { $sum: 1 }
    }
  }
])

操場

使用$toDate運算符,

  • 通過$toDate將該字符串日期轉換為日期類型
  • $year從上述轉換日期獲取年份
publicationsByYear = collection.aggregate([
  {
    $group: {
      _id: {
        $year: { $toDate: "$attributes.created" }
      },
      num_publications: { $sum: 1 }
    }
  }
])

操場

暫無
暫無

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

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