我有一首歌的名字,我为它节省了评分.它看起来像下面的图片,因为我push()
用来存储每个新的评级.
但我想看到的是,ratings
作为一个对象数组,每个包含这样的东西:
voter: {
ip: "1.1.1.1",
stars: 3,
}
Run Code Online (Sandbox Code Playgroud)
所以rating
关键最终会是这样的:
rating: [{ip: "1.1.1.1", stars: 3}, ...]
Run Code Online (Sandbox Code Playgroud)
然后,我只能为每个IP地址启用一个投票.我在Firebase
文档中找不到的
是如何添加到现有密钥,在这种情况下rating
(但它会像[list,like]) - hash
像上面那样的新东西.因为push()
自动创建hash-key
值,我想附加到现有密钥.
编辑: 我知道 Firebase本身不存储数组这一事实,但在这种情况下无关紧要,这就是我想看到我的数据的方式.
Fra*_*len 14
您当前正在使用push
添加新子项,这会自动为新节点生成一个名称,该名称在多个客户端中"保证"是唯一的.
ref.push({ ip: userIP, stars: userStars });
Run Code Online (Sandbox Code Playgroud)
Firebase的push
方法是让多个客户将项目添加到有序集合的好方法.如果要使用数组完成相同的操作,则必须在客户端之间同步数组的长度.Firebase的名称生成不需要这样的开销,因此通常是在多个客户端之间保留订单集合的首选.
但在你的情况下,你似乎不想要一个有序的"仅附加"集合.您似乎认为IP地址是每个节点的标识.在这种情况下,我将使用IP地址作为节点名称的基础:
votes
"1.1.1.1": 3
"1.2.3.4": 5
"1.7.4.7": 2
Run Code Online (Sandbox Code Playgroud)
你可以用以下方法完成
ref.child(userIP).set(userStars);
Run Code Online (Sandbox Code Playgroud)
如果您想随后将所有投票读入数组,您可以执行以下操作:
var votes = [];
votesRef.on('value', function(snapshot) {
snapshot.forEach(function(vote) {
votes.push({ ip: vote.key, stars: vote.val() });
});
alert('There are '+votes.length+' votes');
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23688 次 |
最近记录: |