我想更新对象数组,其中包含 mongodb 中的日期时间字段

编程入门 行业动态 更新时间:2024-10-03 21:20:20

<a href=https://www.elefans.com/category/jswz/34/1770839.html style=我想更新对象数组,其中包含 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 中的日期时间字段

本文发布于:2024-05-30 05:01:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770169.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:我想   数组   字段   其中包含   对象

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!