【问题标题】:Updating multiple objects in an Array belonging to a collection更新属于集合的数组中的多个对象
【发布时间】:2022-01-04 22:53:02
【问题描述】:

我在我的程序中使用 MERN 堆栈和 mongoose 来访问数据库。我有一个名为 Movies 的集合,我想在这个集合中的一个数组中编辑多个对象。这是电影模式包含在我的数据库中的内容:

我想编辑 seats 内二维数组中的多个对象,并将 isReserved 更改为 True

我只是使用 findOne 访问数据,因为我仍然不知道如何更新我想要访问的对象。

app.post('/confirm/:movieId/:timeId', (req, res) => { 
    const movieId = req.params.movieId;
    const timeId = req.params.timeId;
    const selectedSeats = req.body;
    // console.log("in confirm DB ");
    // console.log(selectedSeats);
    let getSeats;
    let getTimeSlots;
    const length_timeId = timeId.length;
    Movies.findOne({ movieId }, (err, movie) => {
        console.log("INSIDE");
        getTimeSlots = movie['timeslots'];
        let index = timeId.substring(1, length_timeId);

        //get the seats
        getSeats = getTimeSlots[parseInt(index)-1];
        //loop through seats 
        console.log("PRINTING GET SEATS");
        console.log(getSeats);
        for(var i=0; i<selectedSeats.length; i++) { 
            let row = parseInt(selectedSeats[i] / 5);
            let id = selectedSeats[i] % 5;
            console.log(getSeats["seats"][row][id]);
        }
    })
}) 

我已经访问了我想要编辑的对象,因为该代码在我的终端上显示:

非常感谢有关如何更新 isReserved 状态的一些提示。谢谢!

【问题讨论】:

  • 请不要粘贴截图。对示例输入和输出数据也使用格式化文本,请参阅meta.stackoverflow.com/q/285551/3027266
  • 将日期、时间或持续时间存储为 文本 是一个设计缺陷,您永远不应该这样做。始终存储正确的 Date 对象,我建议存储秒数(或分钟数,具体取决于您的要求)

标签: javascript mongodb mongoose mongoose-schema mern


【解决方案1】:

您是通过id 还是通过数组中的索引指定时间段和座位?如果您使用索引,那么解决方案非常简单

const key = "timeslots." + req.params.timeId + ".seats." + req.body + ".isReserved";
var upd = {};
upd[key] = true;

db.Movies.updateOne({ movieId: req.params.movieId }, { $set: upd })

如果您的代码使用id,那么您必须使用数组过滤器,请参阅Update Nested Arrays in Conjunction with $[],与此类似

db.Movies.updateOne(
   { movieId: req.params.movieId },
   { $set: { "timeslots.$[slot].seats.$[seat].isReserved": true } },
   { arrayFilters: [ { "slot.id": req.params.timeId } , { "seat.id": req.body } ] }
)

【讨论】:

  • 我使用 updateOne 还是 updateMany?只想指出,我想更新数组中的多个对象。那么它仍然可以工作吗?
  • updateOne() 表示您更新了一个文档 - 无论您在此文档中更新了多少对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2023-04-03
  • 2020-04-06
  • 2018-11-13
  • 2020-06-14
  • 1970-01-01
相关资源
最近更新 更多