我想更新对象数组,其中包含 mongodb 中的日期时间字段"/>
我想更新对象数组,其中包含 mongodb 中的日期时间字段
嗨,我是 mongodb 的新手,试图更新对象数组中的日期字段。
下面我提到了我的模型和我的查询,它适用于 start_time 和 end_time 但不更新对象数组但我需要更新 time_slots 数组中对象中的 dateTime 字段。
这些是我的 mongodb 示例文档:
db={
"teacher": [
{
"_id": "6434cf",
"start_time": ISODate("2023-03-22T07:00:25.787Z"),
"end_time": ISODate("2023-03-22T10:00:35.604Z"),
"duration": "15min",
"time_slots": [
{
"sl_no": 1,
"dateTime": ISODate("2023-03-22T06:30:25.787Z")
},
{
"sl_no": 2,
"dateTime": ISODate("2023-03-22T06:45:25.787Z")
}
]
},
{
"_id": "6434ctd",
"start_time": ISODate("2023-03-23T07:00:25.787Z"),
"end_time": ISODate("2023-03-23T10:00:35.604Z"),
"duration": "20min",
"time_slots": [
{
"sl_no": 1,
"dateTime": ISODate("2023-03-23T06:30:25.787Z")
},
{
"sl_no": 2,
"dateTime": ISODate("2023-03-23T06:50:25.787Z")
}
]
}
]
}
我对更新开始时间和结束时间的查询
updateOne(
{ _id:id },
[{
$set: {
start_time: { $dateAdd: { startDate: "$start_time", unit: "minute", amount: hours}},
end_time: { $dateAdd: { startDate: "$end_time", unit: "minute", amount: hours } }
}
}]
)
如果用户想延迟 1 小时,这是我想要的输出
{
"_id": "6434cf" ,
"start_time":ISODate("2023-03-22T08:00:25.787Z"),
"end_time":ISODate("2023-03-22T11:00:35.604Z"),
"duration": "15min",
"time_slots": [
{
"sl_no": 1,
"dateTime": ISODate("2023-03-22T07:30:25.787Z")
},
{
"sl_no": 2 ,
"dateTime":ISODate("2023-03-22T07:45:25.787Z")
}
],
}
开始时间、结束时间和数组中的日期时间应该增加 1 小时。
回答如下:一个选择是使用
$map
:
db.teacher.updateOne(
{_id: id},
[
{$set: {
start_time: {$dateAdd: {startDate: "$start_time", unit: "minute", amount: delta}},
end_time: {$dateAdd: {startDate: "$end_time", unit: "minute", amount: delta}},
time_slots: {$map: {
input: "$time_slots",
in: {
sl_no: "$$this.sl_no",
dateTime: {$dateAdd: {
startDate: "$$this.dateTime", unit: "minute", amount: delta
}}
}
}}
}}
]
)
在游乐场示例中查看它是如何工作的
更多推荐
我想更新对象数组,其中包含 mongodb 中的日期时间字段
发布评论