我认为,如果我理解核心问题,简短的回答是没有办法将一个空数组强制进入 Firebase。但是,有些范例可能比您上面的范例更有效。
请记住,Firebase 是一个实时环境。汽车和事故的数量可以(并且将会)随时变化。最好将一切都视为实时到达的新数据,甚至避免考虑存在或不存在。
// fetch all the people in real-time
rootRef.child('people').on('child_added', function(personSnapshot) {
// monitor their cars
personSnapshot.ref().child('cars', 'child_added', function(carSnapshot) {
// monitor accidents
carSnapshot.ref().child('accidents', 'child_added', function(accidentSnapshot) {
// here is where you invoke your code related to accidents
});
});
});
请注意如何不需要if exists/unless
类型逻辑。请注意,您可能还想监视child_removed
并调用以停止听特定的孩子。cars
people
ref.off()
如果出于某种原因您想坚持使用静态模型,那么forEach将成为您的朋友:
// fetch all the people as one object, asynchronously
// this won't work well with many thousands of records
rootRef.child('people').once('value', function(everyoneSnap) {
// get each user (this is synchronous!)
everyoneSnap.forEach(function(personSnap) {
// get all cars (this is asynchronous)
personSnap.ref().child('cars').once('value', function(allCars) {
// iterate cars (this is synchronous)
allCars.forEach(function(carSnap) { /* and so on */ });
});
});
});
请注意,即使使用 forEach,也不需要“存在或除非”这种逻辑。