mongodb - 是否可以获取数组的最后一个元素并将其推入另一个数组(撤消 - 重做)?
问题描述
我正在尝试为实时应用程序实现和撤消重做功能,并且我想将元素推送到数组中。该元素是另一个数组中的最后一个元素。我只想在一个查询中实现这一点,以避免并发问题。
我有一个包含两个数组的架构:
undoActions:[ActionSchema],
重做动作:[ActionSchema],
我试过这个:
const result = await this.findOneAndUpdate({
_id: id
}, {
$push: {
redoActions: {
$pop: {
undoActions: 1
},
}
}
});
这不会在 undoActions 中弹出并在 redoActions 数组中插入和清空对象。
因此,当执行撤消功能时,我想将 undoActions 的最后一个元素保存到 redoActions。
解决方案
您可以对嵌入在对象中的数组执行一些简单的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));
推荐阅读
- c# - 如何在 ASP.NET MVC 和 C# 中创建 JSON Web 签名 (JWS)
- flutter - Flutter/dart 将整个部分 OFFSCREEN 小部件捕获为图像
- qt - 在 X 上运行的 Qt5 程序可以禁用最小化和关闭吗?
- php - 从 DateTime Diff 获取剩余天数
- typescript - 如何获取键值数组中的键值
- postgresql - 如何在 jooq 中使用插入...返回语句作为“类表”查询?
- java - maven有没有办法根据指定的情况修改版本号?
- javascript - 在firebase中检索非规范化数据
- python - 测试抽象模型 - django 2.2.4 / sqlite3 2.6.0
- javascript - javascript 计数器总是落后 1