gpt4 book ai didi

node.js - "Race like" Mongoose 状况

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:02 28 4
gpt4 key购买 nike

我有一个进程会触发多个请求,这些请求又会触发多个 Webhooks。当我收到所有网络钩子(Hook)时,我知道该过程已完成。我的模型看起来像这样。

{
name: 'name',
status: 'PENDING',
children: [{
name: 'child1',
status: 'PENDING'
}, {
name: 'child2',
status: 'PENDING'
}]

}

这个想法是当 webhooks 进来时,我将子文档更新为 COMPLETE。在每次更新结束时,我都会检查其他更新是否完整,如果是,我会在父级上设置 status='COMPLETE' 。看起来,在另一次调用确定服务仍处于 PENDING 之后但在第二次调用保存之前,该服务的一次调用将其标记为 COMPLETE。当第二个保存时,它会用父级上的 PENDING 覆盖 COMPLETE

这是我的架构中的代码:

methods: {
doUpdate: function(data) {
var child = this.children.id(data.childId);
child.status = 'COMPLETE';
if (_.every(this.children.status, 'COMPLETE'))
this.status = 'COMPLETE';
return this.save();
}
}

最佳答案

我认为,当您只需修改并保存子对象而不是每次都保存/覆盖整个文档时,您就可以解决您的问题。
为此,您可以使用 positional $在您的更新声明中。
本质上它看起来像这样:

db.yourChildrenCollection.update(
{ _id: this._id, 'children.name': childName },
{ $set: { 'children.$.status' : 'COMPLETE' } }
)

您必须修改变量名称,因为我不知道您的集合名称等,但我认为您明白了。

关于node.js - "Race like" Mongoose 状况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089529/

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