【发布时间】:2020-02-27 09:30:30
【问题描述】:
我需要帮助。
我的项目中有 2 个集合,一个称为 Products,另一个称为 Users。
我将选定的产品信息复制到用户的子集合中作为收藏夹,在这种情况下:
用户(收藏)> 用户(文档)> 收藏(收藏)> 产品(文档)
我的想法是创建一个云功能,它将监视“产品集合”产品(集合)>产品(文档)中任何产品的任何更新,然后将这些更改反映在用户>收藏夹子集合中在此处更新产品的值:
用户(收藏)> 用户(文档)> 收藏(收藏)> 产品(文档)
这怎么可能来自 index.js ?这是我的代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.updateFavoritedProducts = functions.firestore.document('products/{productId}').onUpdate((change, context) => {
admin.firestore().collection('products').get(queryProductsSnapshot => {
queryProductsSnapshot.forEach(productQuery => {
const pricePQ = productQuery.price;
console.log('tetesfsf');
return admin.firestore().collection('users').get(queryUsersSnapshot => {
queryUsersSnapshot.forEach(userSnapshot => {
return admin.firestore().collection('users').doc(userSnapshot.id).collection('favorites').get(queryUserProductsSnapshot => {
queryUserProductsSnapshot.forEach(queryUserProductSnapshot => {
if (queryUserProductSnapshot.id === productQuery.id) {
return admin.firestore().doc(`users/${userSnapshot.id}/favorites/${queryUserProductSnapshot.id}`).update({ amountVolume: '123456'
})
} else {
console.log("No events found");
return null
}
})
});
})
})
});
})
});
【问题讨论】:
-
您的代码中有两个
QuerySnapshot.forEach循环,其中一个似乎没有找到任何文档。看来您应该在调用任何方法之前检查QuerySnapshot是否为空。 -
这对我来说仍然不起作用;您是否知道如何重写此代码,以便在“产品集合”级别进行更新后,它可以在“收藏夹子集合”中进行更新?
-
您是否添加了我提到的
if检查?如果是这样,并且错误仍然存在,请更新您的问题以显示更新后的代码。 -
我想通了并在此处发布了解决方案。谢谢!
标签: node.js firebase google-cloud-firestore google-cloud-functions