Firebase:如何根据时间戳键删除节点内的项目范围?
Firebase: how to delete range of items inside node based on timestamp keys?
我的 Firebase 数据库数据如下所示:
- 数字是以秒为单位的时间戳(所以数据基本上是一个
时间序列)。
- 我想删除所有早于 5 秒的数据。
- 我正在使用新的
Version 9 Modular JavaScript SDK's
所以例如我们假设当前时间是1637149389
我想根据下图删除所有数据:
我尝试使用此代码,但结果是我的整个数据路径都被删除了(包括不早于 5 秒的数据):
var timestamp = Math.round(Date.now() / 1000) - 5; //get Timestamp in Mili, convert to Seconds, and then set it 5 seconds to the past
var UID = 'uid1';
const ref = ref(
database,
'device_realtime/' + UID
);
var refQuery = query(
ref,
...[fb.orderByKey(), fb.endAt(timestamp.toString())]
);
remove(refQuery);
- 我有点困惑,因为当我调用
get(refQuery)
时
查询我的结果是正确的。
- 我只看到超过 5 秒的数据!
控制台:
如何根据时间戳仅删除特定范围的项目?
要删除节点,您需要知道该节点的完整路径。 Firebase 不支持 update/remove 查询,您可以在其中将根引用和条件传递给数据库。
因此您需要在要删除的每个子节点上调用 remove()
。
类似于:
get(refQuery, (results) => {
results.forEach((snapshot) => {
remove(snapshot.ref);
})
})
我的 Firebase 数据库数据如下所示:
- 数字是以秒为单位的时间戳(所以数据基本上是一个 时间序列)。
- 我想删除所有早于 5 秒的数据。
- 我正在使用新的
Version 9 Modular JavaScript SDK's
所以例如我们假设当前时间是1637149389
我想根据下图删除所有数据:
我尝试使用此代码,但结果是我的整个数据路径都被删除了(包括不早于 5 秒的数据):
var timestamp = Math.round(Date.now() / 1000) - 5; //get Timestamp in Mili, convert to Seconds, and then set it 5 seconds to the past
var UID = 'uid1';
const ref = ref(
database,
'device_realtime/' + UID
);
var refQuery = query(
ref,
...[fb.orderByKey(), fb.endAt(timestamp.toString())]
);
remove(refQuery);
- 我有点困惑,因为当我调用
get(refQuery)
时 查询我的结果是正确的。 - 我只看到超过 5 秒的数据!
控制台:
如何根据时间戳仅删除特定范围的项目?
要删除节点,您需要知道该节点的完整路径。 Firebase 不支持 update/remove 查询,您可以在其中将根引用和条件传递给数据库。
因此您需要在要删除的每个子节点上调用 remove()
。
类似于:
get(refQuery, (results) => {
results.forEach((snapshot) => {
remove(snapshot.ref);
})
})