【问题标题】:Google Cloud Functions Add values to a map in firestoreGoogle Cloud Functions 向 Firestore 中的地图添加值
【发布时间】:2021-12-10 18:00:24
【问题描述】:

这是我在 Firestore 中向地图添加值的代码。目前地图每次都会被覆盖

exports.addTrainingtoList = functions.firestore
    .document('/users/{uid}/trainings/{trainings}')
    .onCreate((change, context) => {
        const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
        const trainingsID = change.data().trainingsID;
        const trainingsName = change.data().training;
        const trainingsTimestamp = change.data().timestamp;

        doc.update({
            Trainings: {
                ...doc.Trainings,
                [trainingsID]: {
                    'trainingsName': trainingsName,
                    'trainingsDate': trainingsTimestamp,
                },
            },
        })

    });

这是我在弗兰克斯回答后更新的代码:

    exports.addTrainingtoList = functions.firestore
        .document('/users/{uid}/trainings/{trainings}')
        .onCreate((change, context) => {
            const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
            const trainingsID = change.data().trainingsID;
            const trainingsName = change.data().training;
            const trainingsTimestamp = change.data().timestamp;
    
            const nameField = trainingsID + ".trainingsName";
            const timestampField = trainingsID + ".trainingsDate";
            doc.update({
               Trainings: {
                    ...doc.Trainings,
                    [nameField]: trainingsName,
                    [timestampField]: trainingsTimestamp,
                   },
              })
    
        });

目前地图已被覆盖。

在这里你可以看到我得到了什么:

在这里你可以看到我想要的。

提前致谢。

【问题讨论】:

    标签: node.js google-cloud-firestore google-cloud-functions


    【解决方案1】:

    add nested fields in an object 使用点符号,如下所示:

    const nameField = trainingsID + ".trainingsName";
    const timestampField = trainingsID + ".trainingsDate";
    doc.update({
        Trainings: {
            ...doc.Trainings,
            [nameField]: trainingsName,
            [timestampField]: trainingsTimestamp,
        },
    })
    

    由于您更新了问题以显示您想要获得的内容,因此可以通过以下方式完成:

    const trainingsID = change.data().trainingsID + Date.now();
    

    然后你的原始代码更新文档。

    【讨论】:

    • 嘿弗兰克,非常感谢你的回答。我已经更新了我的帖子。如果你能看一下,那就太棒了。
    • 您能否还原您的编辑,并将更新后的代码显示为添加?现在我的回答已经没有意义了,重要的是要让未来的访问者保持一致。我已经更新了我的答案,以说明如何同时添加新地图。
    • 我更新了我的帖子。我想现在应该可以理解了。此外,我已经用您的新答案更新了我的代码。 change.data().trainings 得到我的 trainingsID(training1635231834392037) 因为我将它存储在文档中。所以我认为不需要 Date.now()。我试图使用你的代码,只是为了看看我的地图是否被覆盖或者它是否增加了价值。结合您的 trainingsID 代码和我的旧代码,地图仍然会被覆盖。
    【解决方案2】:

    终于在 Franks 的帮助下,我找到了解决问题的方法。

    exports.addTrainingtoList = functions.firestore
    .document('/users/{uid}/trainings/{trainings}')
    .onCreate((change, context) => {
        const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
        const trainingsID = change.data().trainingsID;
        const trainingsName = change.data().training;
        const trainingsTimestamp = change.data().timestamp;
    
        const nameField = `trainings.${trainingsID}.trainingsName`;
        const dateField = `trainings.${trainingsID}.trainingsDate`;
    
        doc.update({
    
            [nameField]: trainingsName,
            [dateField]: trainingsTimestamp,
        })
    
    });
    

    这是结果:

    如果您最终想从地图中删除值,您可以使用:

    exports.delTrainingtoList = functions.firestore
    .document('/users/{uid}/trainings/{trainings}')
    .onDelete((change, context) => {
        const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('trainings');
        const trainingsID = change.data().trainingsID;
        const trainingsName = change.data().training;
        const trainingsTimestamp = change.data().timestamp;
    
        const trainingsField = `trainings.${trainingsID}`;
    
    
        doc.update({
    
            [trainingsField]: FieldValue.delete(),
        })
    
    });
    

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多