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

实际上,有一个简单的解决方案(下面的代码).

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

它在大多数情况下都是有效的,但如果receive_date是29/2/2567,则会抛出错误,因为公历2567不是闰年,而是佛年.

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

推荐答案

您可以将原始日期$split转换为 token ,然后使用$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"
    }
  }
])

Mongo Playground

Mongodb相关问答推荐

从MongoDB中的一个非空字段获取值

无法在Ubuntu 22.04上安装MongoDB 7.0

使用MongoDB 4将根文档替换为数组

匹配/筛选/投影对象中数组中数组中的嵌套字段

MongoDB聚合$group阶段$top与$first在大型数据集上的效率

MongoDB:从开始日期和结束日期数组中匹配特定日期的聚合查询

MongoDB - 分组并找到前 N 个

在golang中的mongodb中的集合列表中打印集合

如何将 MongoDB 集合中的 _id 字段更改为 User_id?

$lookup 结果 mongodb 的计数

如何使用 Node.js 和 mongoose 解决command find requires authentication?

如何使用 mongodb 和 php 正确处理分页查询?

如何使用 MongoDB 建模 likes投票系统

在 mongodb 聚合框架中执行 case-statement

Mongo聚合框架,排序然后分组不起作用

在 MongoDB 中快速搜索数十亿个小文档的策略

使用命令行从 MongoDB 数据库中的所有集合中删除所有索引

何时使用Singleton单例、Transient和使用 Ninject 和 MongoDB 的请求

Meteor 发布/订阅独特客户端集合的策略

开发人员必须采取哪些mental steps才能开始从 SQL 迁移到 NOSQL(CouchDB、Fathom DB、MongoDB 等)?