在下面的代码中,我尝试使用云函数进行多次更新,将我的某些字段设置为新值,但这只会导致覆盖每个节点。我真的不明白这种行为,因为我只需要一个简单的更新。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.onJobBid_Status = functions.database
.ref("/JobBids/{jobId}/{bidId}/status")
.onWrite((event) => {
let newStatus = event.data.val();
let updates = {};
updates["/Jobs/" + event.params.jobId] = { status: newStatus, };
updates["/Users/" + event.params.bidId + "/JobBids/" + event.params.jobId] = { status: newStatus, level:"4", color:"green" };
return admin.database().ref().update(updates);
});
答案 0 :(得分:1)
当您致电更新时,Firebase服务器:
updates
。set()
操作。因此,虽然您可以更新特定路径,但在每个路径上操作都是常规set()
。这意味着它将替换每条路径下的数据。
解决方案是拥有密钥中最低级别属性的完整路径。所以在你的情况下:
let updates = {};
updates["/Jobs/" + event.params.jobId+"/status"] = newStatus;
let jobPath = "/Users/" + event.params.bidId + "/JobBids/" + event.params.jobId;
updates[jobPath+/status"] = newStatus;
updates[jobPath+/level"] = "4"; // consider storing this as a number
updates[jobPath+/color"] = "green" ;
使用这些updates
,您只会替换status
,level
和color
属性的值。