加载文档并在脚本补丁中创建对象
Load Document and create object inside script patch
我有一个包含付款集合的事件对象。当事件被取消时,我需要将这些付款添加到适当的用户对象退款集合中。根据文档,我得出以下示意图脚本:
_(this.Payments).forEach(function(payment) {
var user = LoadDocument(payment.UserId);
user.Refunds.push(new { EventId = this.Id, Payment = payment });
}
在这个原理图脚本中有两件事我没有在文档中找到正确的做法:
1. 通过 Id 加载另一个文档(第 2 行)
2. 创建新的 json-对象(第 3 行)
LoadDocument() 是正确的,但是在补丁中加载时,任何工作单元都不会自动跟踪加载的文档。
您还必须告诉 Raven update/store 该文件:
var user = LoadDocument(payment.UserId);
user.Refunds.push({ EventId = this.Id, Payment = payment });
PutDocument(user.UserId, user);
如果你真的想从补丁中做到这一点,上面的方法可能会奏效。然而,这似乎是一个更具体的领域操作,可能 更好地模拟应用程序代码中的行为(即引发事件并将退款添加到代码中的用户对象)。不能 100% 确定 Raven 如何处理补丁内的事务等等...
编辑:对于你的第二个问题:你不需要使用 'new' 关键字
我有一个包含付款集合的事件对象。当事件被取消时,我需要将这些付款添加到适当的用户对象退款集合中。根据文档,我得出以下示意图脚本:
_(this.Payments).forEach(function(payment) {
var user = LoadDocument(payment.UserId);
user.Refunds.push(new { EventId = this.Id, Payment = payment });
}
在这个原理图脚本中有两件事我没有在文档中找到正确的做法: 1. 通过 Id 加载另一个文档(第 2 行) 2. 创建新的 json-对象(第 3 行)
LoadDocument() 是正确的,但是在补丁中加载时,任何工作单元都不会自动跟踪加载的文档。
您还必须告诉 Raven update/store 该文件:
var user = LoadDocument(payment.UserId);
user.Refunds.push({ EventId = this.Id, Payment = payment });
PutDocument(user.UserId, user);
如果你真的想从补丁中做到这一点,上面的方法可能会奏效。然而,这似乎是一个更具体的领域操作,可能 更好地模拟应用程序代码中的行为(即引发事件并将退款添加到代码中的用户对象)。不能 100% 确定 Raven 如何处理补丁内的事务等等...
编辑:对于你的第二个问题:你不需要使用 'new' 关键字