Firebase 实时数据库一次更新多个节点
Firebase Realtime Database Update Many Nodes at Once
我有一个聊天应用程序,想计算未读消息的数量。如果 user1 要发送消息,基本上就是这样。
是否有某种方法可以遍历所有用户来更新 vs 具有如下功能。我在想可能有某种方法可以映射所有用户并具体调用每个用户的更新,但似乎无法找出最佳方法
ref.child("Public").child("ChannelName").update({
user1: 0,
user2: old unread messages + 1,
user3: old unread messages + 1,
user4: old unread messages + 1
});
目前正在使用:
UNREAD_MESSAGES.once("value")
.then(snapshot => {
snapshot.forEach(user => {
let userKey = user.key;
let userVal = user.val();
// update unread messages count
if (userKey !== currentUserID) {
UNREAD_MESSAGES.update({
[userKey]: userVal + 1
});
} else {
UNREAD_MESSAGES.update({
[userKey]: 0
});
}
}
)
})
要更新 Firebase 实时数据库中的值,您需要知道其完整路径。 Firebase 数据库不支持更新查询,您将条件和计算或值传递给服务器。
如果您要使用 Cloud Firestore(属于 Firebase 的另一个数据库), 包含可用于此类的 FieldValue.increment()
操作一种方式。
要在没有实时数据库竞争条件风险的情况下进行操作,您实际上需要 run a transaction;在每个柜台上,或在所有柜台上。
我有一个聊天应用程序,想计算未读消息的数量。如果 user1 要发送消息,基本上就是这样。
是否有某种方法可以遍历所有用户来更新 vs 具有如下功能。我在想可能有某种方法可以映射所有用户并具体调用每个用户的更新,但似乎无法找出最佳方法
ref.child("Public").child("ChannelName").update({
user1: 0,
user2: old unread messages + 1,
user3: old unread messages + 1,
user4: old unread messages + 1
});
目前正在使用:
UNREAD_MESSAGES.once("value")
.then(snapshot => {
snapshot.forEach(user => {
let userKey = user.key;
let userVal = user.val();
// update unread messages count
if (userKey !== currentUserID) {
UNREAD_MESSAGES.update({
[userKey]: userVal + 1
});
} else {
UNREAD_MESSAGES.update({
[userKey]: 0
});
}
}
)
})
要更新 Firebase 实时数据库中的值,您需要知道其完整路径。 Firebase 数据库不支持更新查询,您将条件和计算或值传递给服务器。
如果您要使用 Cloud Firestore(属于 Firebase 的另一个数据库), 包含可用于此类的 FieldValue.increment()
操作一种方式。
要在没有实时数据库竞争条件风险的情况下进行操作,您实际上需要 run a transaction;在每个柜台上,或在所有柜台上。