【问题标题】:How to add a new field in Array of data in Firebase realtime database using Firebase Functions?如何使用 Firebase 函数在 Firebase 实时数据库的数据数组中添加新字段?
【发布时间】:2019-02-02 22:38:06
【问题描述】:

我是 Firebase 的新手。我在 Firebase 实时数据库中有以下结构的数据。我的要求是向“用户”下存在的多个(选定的)记录添加一个新字段。

初始数据

db—>user
    —pushId_1 (Auto Generated via push command)
        name: user1
    pushId_2
        name: user2

添加了一个额外字段的必需最终数据(“newField”)

db—>user
    —pushId_1
        name: user1
        newField: sample data
    pushId_2
        name: user2
        newField: sample data

我已经编写了以下代码来执行此操作。

exports.sampleFunction = functions.database.ref('/db/user/{pushId}/')
    .onCreate((snap, context) => {
        console.log('onCreate called with snapshot id = ' + snap.key);
        admin.database().ref('/db/user/').once('value').then(snapshot => {
            if (snapshot.numChildren() > 1) {
                var updates = {};
                var count = 0;
                snapshot.forEach((child) => {
                    if (!child.hasChild('newField') && count < 2) {
                        updates[child.key] = { newField: 'sample data' };
                        count++;
                    }
                });
                //return snapshot.ref.set(updates);   //set is also giving same result.
                return snapshot.ref.update(updates);
            }
            return null;
        }).catch(error => {
            console.error("error in fetching data from db." + error);
        });
        return null;
    });

问题是,此代码正在删除现有字段“name”并将其替换为“newField”。 您能帮我在不删除现有字段的情况下将这个新字段附加到数据中吗?

谢谢

【问题讨论】:

    标签: node.js firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    那是因为您使用的是 set 而不是更新节点。

    Set 替换任何内容,而 update 如果缺少字段,则添加字段,并且仅在新数据中存在字段时替换字段。

    return snapshot.ref.update(updates);

    另外,您将数据设置错误以进行更新。在关键中,您需要具有相对于您正在调用更新而不是嵌套对象的 ref 的路径。 而不是updates[child.key] = { newField: 'sample data' };,应该是

    updates[`${child.key}/newField`] = 'sample data';
    

    现在,当您使用 child 父级(即快照)调用更新时,它会确切知道要更新哪些字段。

    有关详细信息,请参阅文档:https://firebase.google.com/docs/database/admin/save-data#section-update

    【讨论】:

    • 我什至还尝试了“更新”功能。它也给出了相同的结果。
    猜你喜欢
    • 2021-10-04
    • 2023-03-11
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多