Firebase 更新结果集 NodeJS
Firebase Update resultset NodeJS
为什么我似乎无法更新结果集。我有 1000 个项目,我查询 Firebase 并取回一个 DataSnapShot 数组。我想检查数组的每个元素,如果条件存在,则将 "type" 更改为 "C"。我没有收到任何错误,但似乎没有应用更新。我在返回的承诺中这样做,但更新是 "ignored".
var db = admin.database();
var ref = db.ref("/calendars");
ref.once("value", function(snapshot) {
snapshot.forEach(function(data) {
var obj = data.val();
if (someconditionIsTrue) {
var objToUpdate = `calendars\${data.key}`;
console.log(`Should update ${objToUpdate}`);
var entryRef = db.ref("/calendars").child(data.key).child('type');
entryRef.transaction(function(t) {
console.log(`TYPE: ${t}`); // DISPLAYS NULL EVEN THOUGH THERE IS A CHAR IN DB
return "C"; // Should change TYPE in the record to a "C"
});
}
也尝试在 forEach 中做一个集合,但这也不起作用(这就是为什么我认为我必须使用事务)。
弗兰克以最好的方式回答了这个问题:
Firebase 数据库事务是比较和设置的。回调将立即被调用,并根据客户端对当前值的最佳猜测。通常这将为空。您告诉它新值将基于该值,您的回调最终将再次调用,并使用对当前值的更新猜测。参见 Whosebug。com/questions/33578887/… – Frank van Puffelen 18 年 11 月 21 日在 16:21
为什么我似乎无法更新结果集。我有 1000 个项目,我查询 Firebase 并取回一个 DataSnapShot 数组。我想检查数组的每个元素,如果条件存在,则将 "type" 更改为 "C"。我没有收到任何错误,但似乎没有应用更新。我在返回的承诺中这样做,但更新是 "ignored".
var db = admin.database();
var ref = db.ref("/calendars");
ref.once("value", function(snapshot) {
snapshot.forEach(function(data) {
var obj = data.val();
if (someconditionIsTrue) {
var objToUpdate = `calendars\${data.key}`;
console.log(`Should update ${objToUpdate}`);
var entryRef = db.ref("/calendars").child(data.key).child('type');
entryRef.transaction(function(t) {
console.log(`TYPE: ${t}`); // DISPLAYS NULL EVEN THOUGH THERE IS A CHAR IN DB
return "C"; // Should change TYPE in the record to a "C"
});
}
也尝试在 forEach 中做一个集合,但这也不起作用(这就是为什么我认为我必须使用事务)。
弗兰克以最好的方式回答了这个问题:
Firebase 数据库事务是比较和设置的。回调将立即被调用,并根据客户端对当前值的最佳猜测。通常这将为空。您告诉它新值将基于该值,您的回调最终将再次调用,并使用对当前值的更新猜测。参见 Whosebug。com/questions/33578887/… – Frank van Puffelen 18 年 11 月 21 日在 16:21