我正在使用Cloud Functions在Firebase上2小时后删除节点。但是,当我添加一个节点时,一旦在数据库内部创建该节点,它就会被删除
我的index.js:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const CUT_OFF_TIME = 2 * 60 * 60 * 1000; // 2 Hours in milliseconds
exports.deleteOldItems = functions.database.ref('/posts/{randomID1}/{randomID2}/timestamp')
.onWrite(function(change) {
var ref = change.after.ref.parent; // reference to the parent
var now = Date.now();
var cutoff = now - CUT_OFF_TIME;
var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
return oldItemsQuery.once('value').then(function(snapshot) {
// create a map with all children that need to be removed
var updates = {};
snapshot.forEach(function(child) {
updates[child.key] = null;
});
// execute all updates in one go and return the result to end the function
return ref.update(updates);
});
});
我的数据库结构:
"posts" : {
"randomID1" : {
"randomID2" : {
"timestamp" : 1557842159
}
},
"randomID3" : {
"randomID4" : {
"timestamp" : 1557842203
}
},
答案 0 :(得分:1)
您的时间戳以秒为单位存储,而不是以毫秒为单位。由于您的代码使用Date.now
(返回以毫秒为单位的时间戳),因此您正在比较1000x的值。
最简单的解决方案是:
const CUT_OFF_TIME = 2 * 60 * 60; // 2 Hours in seconds
答案 1 :(得分:1)
您正在比较以毫秒为单位的时间戳和以秒为单位的时间戳。
var cutoff = now - CUT_OFF_TIME;
-截止值以毫秒为单位
您需要更改CUT_OFF_TIME
并将Date.now()
转换为秒。