Javascript Firebase实时数据库数据快照之间的差异
如果我有一个数据库结构,如和,我进行如下所示的查询。如果我使用Javascript Firebase实时数据库数据快照之间的差异,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,如果我有一个数据库结构,如和,我进行如下所示的查询。如果我使用snapshot.forEach(function(childSnapshot)访问每个节点,以及如果我不访问这些节点,用于从数据库下载快照的流量是否有差异 如果没有区别,是否有办法只访问Chats中的密钥,而不获取每个密钥所包含内容的快照数据。我假设这样会生成较少的下载数据 var requests = db.ref("Chats"); requests.on('child_added', functi
snapshot.forEach(function(childSnapshot)
访问每个节点,以及如果我不访问这些节点,用于从数据库下载快照的流量是否有差异
如果没有区别,是否有办法只访问Chats
中的密钥,而不获取每个密钥所包含内容的快照数据。我假设这样会生成较少的下载数据
var requests = db.ref("Chats");
requests.on('child_added', function(snapshot) {
var communicationId = snapshot.key;
console.log("Chat id = " + communicationId);
getMessageInfo(
communicationId,
function() {
snapshot.ref.remove();
}
);
如文件中所述,可使用以下任一方法:
,但如果您希望数据实时更新,则应选择(2)。设置侦听器时,Firebase会向侦听器发送数据的初始快照,然后在每次子项更改时发送另一个快照 (1)-示例
firebase.database().ref('/users/').once('value') // Single Call
firebase.database().ref('/users/').on('child_added') // Every Update It is Called
(2)-示例
firebase.database().ref('/users/').once('value') // Single Call
firebase.database().ref('/users/').on('child_added') // Every Update It is Called
而且,我认为您无法获取所有键,因为当您引用一个子项并检索数据时,firebase本身会将其作为键值对(DataSnapshot)发送
进一步参考:当您调用
requests.on('child_added',…)
,您总是要访问请求
节点上的所有数据。无论您在回调函数中做了什么。整个节点都会加载到内存中,并且查询的成本会得到支付。您在内存中对快照所做的操作不会产生任何其他成本
如果您不需要
请求下的所有子节点
,您应该找到某种方法来筛选查询,只筛选您需要的子节点。非常感谢您的回答。虽然我还有一个问题,但如果我启用脱机功能,这会降低查询成本吗?如果您还有其他问题,请单独发布,解释具体情况。堆栈溢出问题应仅限于单个问题,以便将来对其他人最有帮助。