Mongo DB create/update 来自现有日期和时间字段的新字段
Mongo DB create/update new field from existing date and time fields
在 mongo 数据库中有一个名为 item 的集合,其中我有 2 个字段
- ItemReceivedDate - 类型:日期,例如:value/data 2020-09-21T00:00:00.000+00:00
- 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"
}
}
}
}
}
}
])
在 mongo 数据库中有一个名为 item 的集合,其中我有 2 个字段
- ItemReceivedDate - 类型:日期,例如:value/data 2020-09-21T00:00:00.000+00:00
- 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"
}
}
}
}
}
}
])