如何在 "n" 天后删除 Firebase 数据
How to delete firebase data after "n" days
我想从我的 Firebase 中删除一些旧数据,但我很难让它发挥作用。
我尝试了在此处找到的解决方案:Firebase chat - removing old messages
但这并没有被弃用。
所以我这样试试:
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -30);
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
String key = dataSnapshot.getKey();
Marker retrievemarker =dataSnapshot.getValue(Marker.class);
Calendar t3 = new
GregorianCalendar
(c.get(Calendar.YEAR),
c.get(Calendar.MONTH),
retrievemarker.getSavedate());
int date1= calendar.get(Calendar.DATE);
int date2= t3.get(Calendar.DATE);
Log.d("date1",""+date1);
Log.d("date2",""+date2);
if( date1 == date2 ){
myRef.child(key).setValue(null);
}
解释:
在我的 Firebase 中,我保存了一个名为 Marker 的对象,这个对象有一个变量来存储保存日期,即对象在 Firebase 中保存的日期。
int date = c.get(Calendar.DATE);
marker.setSavedate(date);
我想在 30 天后删除 Firebase 中的对象。所以我尝试从今天的日期中减去 30 天,而不是我想将它与对象中的保存日期进行比较,如果它等于我将从 Firebase 中删除该对象。
对于减法,我参考了以下问题的答案:How to subtract X days from a date using Java calendar?
但它不起作用。如果我今天向 Firebase 添加一个对象,这两个日期总是相等的。
所以我猜减法不起作用。
我做错了什么?
假设您有一个数据结构,其节点行如下:
-KItqNxLqzQoLnUCb9sJaddclose
time: "Thu Apr 28 17:12:05 PDT 2016"
timestamp: 1461888725444
每个这样的节点都有一个 timestamp
属性 指示它的创建时间。最好你设置这个 属性 using Server Timestamp.
使用此数据结构,您可以轻松构建一个查询,该查询 returns 仅保留超过 30 天的项目并将其删除:
long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS);
Query oldItems = ttlRef.orderByChild("timestamp").endAt(cutoff);
oldItems.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot itemSnapshot: snapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
我的 Firebase 结构类似于 -> firebaseurl。com/test/user_id/2017-05-12 然后我的数据结构化了时间
所以我正在使用
long cutoff = new Date().getTime()-TimeUnit.MILLISECONDS.convert(10, TimeUnit.DAYS);
//Get days number for delete data
Date d = new Date(cutoff );
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
String old_date = `dateFormatGmt.format(new Date(cutoff));
// Get date of deleting content
ref2 = new Firebase("firebaseurl.com/test/user_id/" + user_id); // Firebase url
ref2.child(old_date).removeValue(); //Remove element
对我有用
另一个选项是使用来自 firebase 的 PubSub google cloud with Schedule Functions,我正在使用并且我整天都在阅读文档(每天框)并且我验证日期(在创建文档上注册)是否大于今天的日期,然后,我必须从 firestore 中删除该文档,因为它;
我想从我的 Firebase 中删除一些旧数据,但我很难让它发挥作用。
我尝试了在此处找到的解决方案:Firebase chat - removing old messages
但这并没有被弃用。
所以我这样试试:
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -30);
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
String key = dataSnapshot.getKey();
Marker retrievemarker =dataSnapshot.getValue(Marker.class);
Calendar t3 = new
GregorianCalendar
(c.get(Calendar.YEAR),
c.get(Calendar.MONTH),
retrievemarker.getSavedate());
int date1= calendar.get(Calendar.DATE);
int date2= t3.get(Calendar.DATE);
Log.d("date1",""+date1);
Log.d("date2",""+date2);
if( date1 == date2 ){
myRef.child(key).setValue(null);
}
解释: 在我的 Firebase 中,我保存了一个名为 Marker 的对象,这个对象有一个变量来存储保存日期,即对象在 Firebase 中保存的日期。
int date = c.get(Calendar.DATE);
marker.setSavedate(date);
我想在 30 天后删除 Firebase 中的对象。所以我尝试从今天的日期中减去 30 天,而不是我想将它与对象中的保存日期进行比较,如果它等于我将从 Firebase 中删除该对象。
对于减法,我参考了以下问题的答案:How to subtract X days from a date using Java calendar?
但它不起作用。如果我今天向 Firebase 添加一个对象,这两个日期总是相等的。 所以我猜减法不起作用。
我做错了什么?
假设您有一个数据结构,其节点行如下:
-KItqNxLqzQoLnUCb9sJaddclose
time: "Thu Apr 28 17:12:05 PDT 2016"
timestamp: 1461888725444
每个这样的节点都有一个 timestamp
属性 指示它的创建时间。最好你设置这个 属性 using Server Timestamp.
使用此数据结构,您可以轻松构建一个查询,该查询 returns 仅保留超过 30 天的项目并将其删除:
long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS);
Query oldItems = ttlRef.orderByChild("timestamp").endAt(cutoff);
oldItems.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot itemSnapshot: snapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
我的 Firebase 结构类似于 -> firebaseurl。com/test/user_id/2017-05-12 然后我的数据结构化了时间 所以我正在使用
long cutoff = new Date().getTime()-TimeUnit.MILLISECONDS.convert(10, TimeUnit.DAYS);
//Get days number for delete data
Date d = new Date(cutoff );
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
String old_date = `dateFormatGmt.format(new Date(cutoff));
// Get date of deleting content
ref2 = new Firebase("firebaseurl.com/test/user_id/" + user_id); // Firebase url
ref2.child(old_date).removeValue(); //Remove element
对我有用
另一个选项是使用来自 firebase 的 PubSub google cloud with Schedule Functions,我正在使用并且我整天都在阅读文档(每天框)并且我验证日期(在创建文档上注册)是否大于今天的日期,然后,我必须从 firestore 中删除该文档,因为它;