对于每个用户帐户,我试图计算他们今天有多少事件。如何计算符合特定条件的Firebase子项目
accounts -
{
"-KaxcGWx1-a8s7dhsjhsd" : {
"name" : "Bill",
"events" : [ {
"event" : "-KdHscYor4mA--ubIHBj"
}, {
"event" : "-KdKsJBdHimgPPQQ6bcA"
} ],
},
"-KaxcGWx1-rA2anjKI4h" : {
"name" : "Bob",
"username" : "Bob"
"events" : [ {
"event" : "-KdHscYor4mA--ubIHBj"
}]
}
}
events -
{
"-KdHscYor4mA--ubIHBj" : {
"dateCreated" : "Fri Feb 17 2017 23:37:32 GMT+0000 (GMT)",
"eventDate" : "2017-04-01",
"name" : "Event 1",
},
"-KdKsJBdHimgPPQQ6bcA" : {
"dateCreated" : "Fri Feb 17 2017 23:37:32 GMT+0000 (GMT)",
"eventDate" : "2017-04-01",
"name" : "Event 2",
}
}
所以考虑到这两个事件对今天:
我的数据结构如下。我希望比尔有两个,鲍勃有一个。
我已经尝试的代码是:
var todayDate = '2017-04-01';
var ref = firebase.database().ref('accounts/');
ref.once('value', function (snapshot) {
//Foreach user account
var eventCount = 0;
snapshot.forEach(function (account) {
var ref = firebase.database().ref('accounts/' + account.key);
ref.child('events').once('value', function (eventSnapshot) {
//Foreach event
eventSnapshot.forEach(function (child) {
firebase.database().ref('events/' + child.val().event).once('value', function (event) {
if (eventDate === todayDate) {
console.log(account.val().name, 'has an event today -', event.val().name);
eventCount++;
}
});
});
});
console.log(account.val().name, 'total events -', eventCount);
});
});
但是,我越来越控制台的结果是:
Bill total events - 0
Bob total events - 0
Bill has an event today Event 1
Bill has an event today Event 2
Bob has an event today Event 2
您显示的数据结构中没有什么是日期。请添加实际的JSON(作为文本),您可以通过点击[Firebase数据库控制台](https://console.firebase.google.com/project/_/database/data/)中的导出JSON来获取JSON。还要确保你的代码片段是完全独立的。现在,我们无法知道“todayDate”和“eventDate”是什么。在一个小型的jsbin中重现问题,然后将其与您的问题联系起来可能是一个好主意。 –
eventDate是任意的。我简化了我的示例代码,但我会尝试获取jsbin示例。日期匹配工作正常。问题似乎是在snapshot.forEach完成之前触发了回调。这似乎是控制台以明显错误的顺序记录事件的原因 – MNelmes
您是否将帐户名称用作密钥? – adolfosrs