【发布时间】:2021-06-28 05:01:33
【问题描述】:
我有一个包含名称字段的邮箱表,我想在用户表中更改名称时更新/插入该名称。查询总是返回 null。
在用户更改表监听器中:
exports.updateMailboxes = functions.database.ref('/users/{userId}')
.onUpdate((change, context) => {
const rec = change.after.val();
functions.logger.log('updateMailboxes check ', String(context.params.userId));
return admin.database().ref('/mailbox')
.orderByChild('toID')
.equalTo(String(context.params.userId))
.once('value', (snapshot) => {
functions.logger.log('updateMailboxes ', JSON.stringify(snapshot.val()));
snapshot.forEach((child) => {
functions.logger.log('updateMailboxes child ', JSON.stringify(child.val()));
child.ref.update({name: rec.username});
});
});
});
我什至像这样在 equalTo 中硬编码一个值:
.equalTo("f3EXPNBjuecmdViCKZF1FduTrXd2")
它仍然返回 null。
orderByChild 本身就可以工作。
根据 Dharmaraj 的回答,我也尝试按键查询:
exports.updateMailboxes = functions.database.ref('/users/{userId}')
.onUpdate((change, context) => {
const rec = change.after.val();
functions.logger.log('updateMailboxes check ', String(context.params.userId));
return admin.database().ref('/mailbox/{ownerID}')
.orderByKey()
.equalTo(context.params.userId)
.once('value').then((snapshot) => {
functions.logger.log('updateMailboxes ', JSON.stringify(snapshot.val()));
snapshot.forEach((child) => {
functions.logger.log('updateMailboxes child ', JSON.stringify(child.val()));
child.ref.update({name: rec.username});
});
});
});
它仍然返回 null。
我做错了什么?
【问题讨论】:
-
邮箱的用途是什么?如果您正在构建一个消息收件箱,您不会显示发送给两个用户的最新消息,而不管是谁发送的?
-
您好,当然可以——第一条记录显示给 user1,第二条记录显示给 user2——“toID”实际上应该是“otherID”
标签: javascript firebase firebase-realtime-database