У меня есть следующий код для извлечения данных с отметками времени в пределах указанных дат и часовых диапазонов:
app.get('/mymeals/filtered', async(req,res) => {
let dayFrom= req.query.dayFrom;
let dayTo= req.query.dayTo;
let hourFrom= req.query.hourFrom;
let hourTo= req.query.hourTo;
console.log(`${dayFrom}-${dayTo} ${hourFrom} ${hourTo}`);
let userId= req.user.uid;
return await dbroot.ref(`duplicates/${userId}`)
.orderByKey().startAt(`${dayFrom}`).endAt(`${dayTo}`).once('value').then( (snapshot) => {
console.log(snapshot.val());
return snapshot.ref.orderByKey().startAt(`${hourFrom}`).endAt(`${hourTo}`).once('value').then( (s) => {
console.log(s.val());
return res.status(200).send(s.val());
});
})
});
База данных выглядит следующим образом:

То есть для простоты поиска я сначала собираю элементы по дате, затем в пределах даты - по часам. Итак, 12
на изображении выше 12:00PM
.
Теперь Firebase не позволяет связывать два orderByKey()
с, поэтому я пытаюсь выполнить запрос сначала по дате, а затем, учитывая моментальный снимок, пытаюсь перебрать дочерние элементы, используя snapshot.forEach(child)
, например:
app.get('/mymeals/filtered', async(req,res) => {
let dayFrom= req.query.dayFrom;
let dayTo= req.query.dayTo;
let hourFrom= req.query.hourFrom;
let hourTo= req.query.hourTo;
console.log(`${dayFrom}-${dayTo} ${hourFrom} ${hourTo}`);
let userId= req.user.uid;
return await dbroot.ref(`duplicates/${userId}`)
.orderByKey().startAt(`${dayFrom}`).endAt(`${dayTo}`).once('value').then( (snapshot) => {
console.log(snapshot.val());
acc= [];
snapshot.forEach( (day) => {
day.forEach((hour) => {
console.log("This: " + hour.key);
if (hourFrom <= hour.key && hour.key <= hourTo)
hour.forEach((meal) => {
acc.push(meal.val());
});
});
});
return res.status(200).send(acc);
})
});
У меня вопрос, все еще возможно каким-то образом скомпоновать запросы по двум осям, или подход, подобный второму фрагменту кода, - единственный путь?