Node.js firebase函数中的非规范化-创建时从其他文档复制数据

Node.js firebase函数中的非规范化-创建时从其他文档复制数据,node.js,firebase,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,我正试图找出如何在firebase中为订单文档创建合并/非规范化文档,如firebase视频“云函数的五种用途”中所述() 用户创建基本文档,函数从其他几个文档中提取数据以创建所需的结果 下面是我想完成的一个基本示例 exports.orderCreate = functions.firestore .document('orders/{docId}').onCreate((snap, context) => { const id = context.params.docId;

我正试图找出如何在firebase中为订单文档创建合并/非规范化文档,如firebase视频“云函数的五种用途”中所述()

用户创建基本文档,函数从其他几个文档中提取数据以创建所需的结果

下面是我想完成的一个基本示例

exports.orderCreate = functions.firestore
  .document('orders/{docId}').onCreate((snap, context) => {
    const id = context.params.docId;
    const orderDoc = snap.data();
    const branchId = orderDoc.branchId;
    const branchDoc = admin.firestore().collection('branches').doc(branchId);
    const bn = branchDoc.brandName;
    const ln = branchDoc.locationName;
    const logo = branchDoc.imageURL;    
    return admin.firestore().collection('orders')
      .doc(id).set({
        branchBrandName: bn,
        branchLocationName: ln,
        branchLogo: logo
      }, { merge: true });
});
我用哪种方式挥手才能让这一切顺利进行?谢谢

使用
admin.firestore().collection('branchs').doc(branchId)您实际上声明了一个。然后,为了获得文档字段的值,需要调用异步方法

因此,以下几点应该可以做到:

exports.orderCreate = functions.firestore
    .document('orders/{docId}').onCreate((snap, context) => {
        const id = context.params.docId;
        const orderDoc = snap.data();
        const branchId = orderDoc.branchId;
        const branchDoc = admin.firestore().collection('branches').doc(branchId);

        return branchDoc.get()
            .then(branchDocSnapshot => {
                const bn = branchDocSnapshot.data().brandName;
                const ln = branchDocSnapshot.data().locationName;
                const logo = branchDocSnapshot.data().imageURL;
                return admin.firestore().collection('orders')
                    .doc(id).set({
                        branchBrandName: bn,
                        branchLocationName: ln,
                        branchLogo: logo
                    }, { merge: true });
            });

    });


您可能需要处理文档不存在的情况,具体取决于您的数据模型和应用程序功能。请参阅文档。

感谢您的详细回答。谢谢你的帮助!请注意,将来需要获取DocumentSnapshot的data(),例如const bn=branchDocSnapshot.data()。brandName@BillyParadise是的,你是对的,我错了!:-)请注意,您还可以执行
const bn=branchDocSnapshot.get(“brandName”)