Javascript 如何从Firebase中的特定路径数组中获取数据?

Javascript 如何从Firebase中的特定路径数组中获取数据?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我现在正在处理日期,我的数据库结构如下: database[userId][work][year][month][date] 因此,如果我想获得用户在特定日期的工作时间,我会调用: const getWorkData = (userId, year, month, date, callback) => { usersRef.child(`${userId}/work/${year}/${month}/${date}`).on("value", snap =>

我现在正在处理日期,我的数据库结构如下:

database[userId][work][year][month][date]
因此,如果我想获得用户在特定日期的工作时间,我会调用:

const getWorkData = (userId, year, month, date, callback) => {
    usersRef.child(`${userId}/work/${year}/${month}/${date}`).on("value", snap =>
        callback(snap.val())
    )
}
如果我只需要一个日期的数据,这个函数工作得很好。但我想向用户展示整整一周的数据。问题来了

我有两种可能的解决办法,但都不实用

//循环浏览一周的日期数组 常数周日期=[ {年份:2018,月份:11,日期:12}, {年份:2018,月份:11,日期:13}, {年份:2018,月份:11,日期:14}, {年份:2018,月份:11,日期:15}, {年份:2018,月份:11,日期:16}, {年份:2018,月份:11,日期:17}, {年份:2018,月份:11,日期:18}, ]; const userId=userId; const getWorkData=userId,年,月,日期,回调=>{ usersRef.child`${userId}/work/${year}/${month}/${date}`.onvalue,snap=> callbacksnap.val } //循环遍历日期,并在每个日期提取数据 const getWorkDataOfWeek=userId,weeksDates=>{ 常量数据=[]; 常量pushToData=value=>data.pushvalue weeksDates.forEachdateObj=>{ 常数{年、月、日}=dateObj; getWorkDatauserId、年、月、日期、pushToData } } //获取整个数据库,并对其进行筛选 const getWorkDataOfWeek=userId,weeksDates,callback=>{ usersRef.childuserId.onvalue,snap=>{ const workData=snap.val; const data=weeksDates.mapdateObj=>{ 常数{年、月、日}=dateObj; 返回工作数据[年][月][日期]; } 回拨数据 }
} 像Firebase这样的对象数据库的原理是能够按照您想要的方式排列数据,并将其用于将来的使用。这可以防止在检索数据等时出现沉重的CPU负载,您可以通过执行非规范化来实现这一点。这意味着您可以预测如何需要数据并将其写回。所以你需要按周和按日期的数据,把数据写在有周和日期的地方

大概是这样的:

database[userId][work][year][month][date]
/UID/年/月/日 /UID/年/周/日期。你应该已经知道那一周是12,13

使用Firebase,一次在多个路径上保存数据非常容易,您可以使用多路径更新

关于非规范化的文章:

关于多路径更新的文章:

另外,我还要补充一点,在我看来,您只想在需要时读取该数据,所以请使用一次,而不是打开