我正在尝试创建一个云函数,以在项目中的产品每次更新时触发。这是主意。
我有2个收藏集,商店和产品。
在商店集合中,有一个名为产品的子集合,其中包含商店出售的所有产品。通过复制主要产品根集合中的特定项目来“获取数据” 我的想法是我的项目获得良好的性能和成本效益。
为此,我需要创建一个每次修改产品时都要触发的云函数,并查询所有具有相同产品ID 商店 >并更新数据。
我真的很难过。有人可以在这里为我照亮吗?这是我的云功能。
// Exporting the function
export const onProductChange = functions.firestore
.document('products/{productId}')
// Call the update method
.onUpdate(async (snap, context) => {
// Get the product ID
const productID = context.params.productID;
// Query for all the collections with the specific product ID.
const resultSnapshot = await db.collectionGroup('products')
.where('id', '==', productID).get();
// Filter for the collections with the 'products' root and return an array.
const snaphotsInStoreSubcollection = resultSnapshot.docs.filter(
(snapshot: any) => {
return snapshot.ref.parent === 'products';
});
const batch = db.batch();
// Takes each product and update
snaphotsInStoreSubcollection.forEach((el: any) => {
batch.set(el.ref, snaphotsInStoreSubcollection.product);
});
await batch.commit();
});
云功能控制台上的错误
错误:参数“值”的值不是有效的查询约束。不能使用“ undefined”作为Firestore值。在Object.validateUserInput(/srv/node_modules/@google-cloud/firestore/build/src/serializer.js:273:15)在validateQueryValue(/ srv / node_modules / @ google-cloud / firestore / build / src / reference)处。 js:1844:18)在Query.where(/srv/node_modules/@google-cloud/firestore/build/src/reference.js:956:9)在export.onProductChange.functions.firestore.document.onUpdate(/ srv /lib/product-update.js:29:10)位于cloudFunction(/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)位于/worker/worker.js:825:24 process._tickDomainCallback(internal / process / next_tick.js:229:7)
答案 0 :(得分:0)
我建议您看看此documentation,尤其是Event Triggers。
让我知道这是否有帮助。
答案 1 :(得分:0)
我认为snapshotsInStoreSubcollection.product
未定义
batch.set(el.ref, snaphotsInStoreSubcollection.product);
快照是一个文档,其数据是snapshot.data()
您无法在Firestore中将undefined
设置为值,而您正在尝试