gpt4 book ai didi

node.js - 如何使用 Firebase 函数在 Firebase 实时数据库的数据数组中添加新字段?

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:48 25 4
gpt4 key购买 nike

我是 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”。您能否帮助我将这个新字段附加到数据中而不删除现有字段。

谢谢

最佳答案

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

设置会替换任何内容,而更新会添加缺失的字段,并且仅替换新数据中存在的字段。

返回 snapshot.ref.update(updates);

您还设置了错误的更新数据。关键是您需要具有相对于您调用更新而不是嵌套对象的引用的路径。而不是 updates[child.key] = { newField: 'sample data' };,它应该是

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

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

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

关于node.js - 如何使用 Firebase 函数在 Firebase 实时数据库的数据数组中添加新字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52055427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com