gpt4 book ai didi

javascript - 使用 mongoose 对子文档数组进行复杂添加

转载 作者:行者123 更新时间:2023-11-30 08:02:25 32 4
gpt4 key购买 nike

我的数据模型有账户,一个账户有一些信用交易。我将这些事务设计为子文档:

var TransactionSchema = new Schema({
amount: Number,
added: Date
}),
AccountSchema = new Schema({
owner: ObjectId,
balance: Number,
transactions: [TransactionSchema]
});

Transaction 添加到 Account 时,会发生以下情况:

  • transactions 有新的推送给它
  • transactions 按日期排序(供以后显示)
  • balance 设置为所有 transactions
  • 的总和

我现在已经将它放在 Schema.methods 函数中,在保存之前用 JavaScript 执行上述操作。但是,我不确定一次插入多个内容是否安全。

如何在 Mongoose 中使用原子或某种事务更新更好地解决这个问题?在 SQL 中,我只会做一个事务,但在 MongoDB 中我不能,那么如何确保 transactionsbalance 总是正确的?

最佳答案

您可以通过结合所有这三个操作的单个 update 调用来完成所有这些操作(这是使更新组合成为原子的唯一方法)。您不会在更新期间对交易求和,而是使用更改金额更新 balance:

var transaction = {
amount: 500,
added: new Date()
};

Account.update({owner: owner}, {
// Adjust the balance by the amount in the transaction.
$inc: {balance: transaction.amount},
// Add the transaction to transactions while sorting by added.
$push: {transactions: {
$each: [transaction],
$sort: {added: 1}
}}
}, callback);

请注意,这确实利用了 $sort $push 的修饰符在 2.4 中添加并在 2.6 中更新,因此您需要使用最新版本。

关于javascript - 使用 mongoose 对子文档数组进行复杂添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24687011/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com