首页 > 解决方案 > 是否可以获取数组的最后一个元素并将其推入另一个数组(撤消 - 重做)?

问题描述

我正在尝试为实时应用程序实现和撤消重做功能,并且我想将元素推送到数组中。该元素是另一个数组中的最后一个元素。我只想在一个查询中实现这一点,以避免并发问题。

我有一个包含两个数组的架构:

undoActions:[ActionSchema],

重做动作:[ActionSchema],

我试过这个:

const result = await this.findOneAndUpdate({
      _id: id
    }, {
        $push: {
          redoActions: {
             $pop: {
                undoActions: 1
            },
          }
        }
      });

这不会在 undoActions 中弹出并在 redoActions 数组中插入和清空对象。

因此,当执行撤消功能时,我想将 undoActions 的最后一个元素保存到 redoActions。

标签: mongodbmongoose

解决方案


您可以对嵌入在对象中的数组执行一些简单的push()splice()(或)。pop()

const actionSchema = new mongoose.Schema({}, {strict: false});
const userSchema = new mongoose.Schema({
  undoActions:[actionSchema]
  redoActions:[actionSchema]
});

User.findById(userId)
     .exec()
     .then(user => {
       user.redoActions.push(user.undoActions[user.undoActions.length-1])
       user.undoActions.splice(user.undoActions.length-1, 1)
       // or use user.undoActions.pop()
       return user.save();
    })
    .then(user => console.log(user))
    .catch(err => console.log(err));

推荐阅读