如何在 MongoDB 中正确解析佛年?

问题描述 投票:0回答:1

我正在使用存储在佛教年份中的日期时间数据,但我需要将其转换为公历年份。

其实,有一个简单的解决方案(代码如下)。

{
    "$dateSubtract": {
        "startDate": {
            "$dateFromString": {
                "dateString": "$receive_date",
                "format": "%d/%m/%Y %H:%M"
            }
        },
        "unit": "year",
        "amount": 543
    }
}

它在大多数情况下都有效,但如果

receive_date
是29/2/2567,它会抛出错误,因为公历年的2567不是闰年,而是佛教年。

您对解决这个问题有什么建议吗?

mongodb datetime-format
1个回答
0
投票

您可以将原始日期

$split
转换为标记,并使用
$dateFromParts
$subtract
之后重建佛教日期。

db.collection.aggregate([
  {
    "$set": {
      "dateTokens": {
        "$map": {
          "input": {
            "$split": [
              "$receive_date",
              "/"
            ]
          },
          "as": "token",
          "in": {
            "$toInt": "$$token"
          }
        }
      }
    }
  },
  {
    "$set": {
      "buddhist_date": {
        "$dateFromParts": {
          "year": {
            "$subtract": [
              {
                "$arrayElemAt": [
                  "$dateTokens",
                  2
                ]
              },
              543
            ]
          },
          "month": {
            "$arrayElemAt": [
              "$dateTokens",
              1
            ]
          },
          "day": {
            "$arrayElemAt": [
              "$dateTokens",
              0
            ]
          }
        }
      }
    }
  },
  {
    "$unset": "dateTokens"
  },
  {
    "$merge": {
      "into": "collection",
      "on": "_id"
    }
  }
])

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.