此云函数扫描一个集合中的新条目,并调整另一个集合的数据。
来自我的orders
集合的信息将与它们的匹配引用字段一起发送到cars
集合。然而,这个问题出现在更新数据的第二个函数上,当调整运输成本时,它会用更新的数量而不是它们之间的差异来减少totalSales
,这意味着shippingCost的减法比它应该的要多。
我尝试过实现change.before.data
,但没有成功。
代码本身是:
exports.useWildcard = functions.firestore
.document('orders/{docId}')
.onCreate((change, context) =>
{
var tasks = new Promise((resolve, reject) => {
admin.firestore().collectionGroup('cars').where("carRef","==",change.data().sku).get().then(documents => {
docID = '';
documents.forEach((doc) => {
docID = doc.id;
totalSales = 0;
orderPrice = 0;
shippingCost = 0;
if(typeof doc.data().totalSales != "undefined")
totalSales = parseFloat(doc.data().totalSales);
if(typeof change.data().orderPrice != "undefined")
orderPrice = parseFloat(change.data().orderPrice);
if(typeof change.data().shippingCost != "undefined")
shippingCost = parseFloat(change.data().shippingCost);
newTotalSales = totalSales-shippingCost;
admin.firestore().collection('cars').doc(docID).update({"totalSales":newTotalSales}).then(documents => {
resolve();
});
});
if(docID=='') resolve();
});
});
return tasks;
}
);
问题是totalSales
按照代码中的指示减去运输成本,但一些订单可能会进行进一步的运输成本调整,从而产生一个新的价值扣除问题。在这种情况下,我想在totalSales
字段中减去或添加shippingCost
差异。
我认为您应该在订单集合中使用onWriteEvent,而不是onCreate事件,这样您就可以访问change.before.data();
和change.after.data();
。
change.before.data();
将帮助您访问以前的值,而不是减去新值
如果您需要更多信息,请检查此项。