javascript - 如何定位谷歌实时数据库中深度嵌套的对象?
问题描述
我想做一个 cron 作业,删除我的实时数据库中超过 24 小时的深层嵌套对象。
我已经遍历并到达了深层嵌套的对象,但我无法在对象中获取/定位“addTime”的值。如何获取该值以便可以.remove
在父级上运行?到目前为止,它返回为未定义或抛出错误。
.schedule("every 1 hours")
.onRun(context => {
const rootDatabaseRef = admin.database().ref("ghostData/");
return rootDatabaseRef.ref.once("value").then(function(snapshot) {
console.log("snap", snapshot.val());
snapshot.forEach(function(userSnapshot) {
let buckets = userSnapshot.val().buckets;
console.log("buckets", buckets);
buckets.forEach(function(bucket) {
let currentTimeYesterday = new Date(
new Date().getTime() - 24 * 60 * 60 * 1000
).getTime();
let addedTime = bucket.val().addedTime;
console.log("curr time", currentTimeYesterday);
console.log("addedTime", addedTime);
});
});
这是我的实时数据库中的数据以及来自无服务器云功能的日志:
解决方案
我认为您在循环时遇到问题,因为当您执行此操作时, "buckets.forEach(function(bucket)" --> bucket 在您的情况下是 list 的第一个元素,并且每个元素都有一个嵌套 dictionary ,所以首先您必须迭代字典,并且对于字典中的每个键,您将获得另一个字典,并且您必须仅获取附加时间值。
我知道这很难理解,但我认为它正在发生,因为你没有正确循环。
试试下面的代码或类似的代码。
buckets.forEach(function(bucket){
let currentTimeYesterday = new ......
bucket.forEach(function(dict){
Object.keys(dict).forEach(k => {
console.log(k, ':', dict[k].addedTime);
let addedTime = dict[k].addedTime;
});
....
}
....
}
推荐阅读
- javascript - 使用 Route 组件中的 react Router 设置父级的状态
- android - DJI 相机位置相对于 Phatom DJI 4 位置
- r - Tidy 不起作用,出现此错误:No tidy method for objects of class LDA_Gibbs
- android - 获取操作 GET_CONTENT 的文件路径
- linux - 如何在 Linux 中将 R 版本从 3.5 降级到 3.4?
- react-native - 反应原生 fs ios 下载超时
- java - 调度程序 servlet 中未找到映射错误
- javascript - three.js 对象淡入/淡出或应用不透明度
- javascript - 如何使用 JavaScript 将两个值添加到数组中
- c++ - 遍历 unordered_maps cpp 的无序映射中的元素