Mongo DB create/update 来自现有日期和时间字段的新字段

Mongo DB create/update new field from existing date and time fields

在 mongo 数据库中有一个名为 item 的集合,其中我有 2 个字段

  1. ItemReceivedDate - 类型:日期,例如:value/data 2020-09-21T00:00:00.000+00:00
  2. ItemReceivedTime - 类型:整数。这是 24 小时格式
    例如:1. 值是 345 它是 3:45 A.M。
    2. 值为 1323 -> 1:23 P.M.
    3. 值为 1 -> 12:01 A.M.

我想创建一个新字段,我想在其中加入日期和时间 例如:itemReceivedDate - 2020-09-21T00:00:00.000+00:00 和 itemReceivedTime 1323.

itemReceivedDateAndTime - 2020-09-21T13:23:00.000+00:00

我尝试了以下选项

 db.item.updateOne({},[
    {"$set":{"itemReceivedDateAndTime":{"$toDate":{"$concat":[{"$dateToString":{format:"%Y-%m-%d",date:"$itemReceivedDate"}},"T",{"$toString":"$itemReceivedTime"}]}}}])

当我收到 4 位数字(例如 1234 或 2322)的时间时,它工作正常但是当我收到 3 位或 2 位或 1 位以上的时间 [int] 时,查询将失败。

任何建议。

提前致谢

我会这样做:

db.item.updateOne({}, [
   {
      $set: {
         itemReceivedDateAndTime: {
            $let: {
               vars: {
                  time: { $concat: ['0000', { $toString: "$ItemReceivedTime" }] },
                  len: { $strLenCP: { $concat: ['0000', { $toString: "$ItemReceivedTime" }] } }
               },
               in: {
                  $dateFromParts: {
                     year: { $year: "$ItemReceivedDate" },
                     month: { $month: "$ItemReceivedDate" },
                     day: { $dayOfMonth: "$ItemReceivedDate" },
                     hour: { $toInt: { $substrCP: ["$$time", { $subtract: ["$$len", 4] }, 2] } },
                     minute: { $toInt: { $substrCP: ["$$time", { $subtract: ["$$len", 2] }, 2] } },
                     timezone: "Europe/Zurich"
                  }
               }
            }
         }
      }
   }
])