gpt4 book ai didi

android - 删除早于天数的消息 - 使用 MAP 的时间戳

转载 作者:行者123 更新时间:2023-11-29 01:13:54 25 4
gpt4 key购买 nike

我正在尝试使用时间戳将旧消息删除到 FriendlyChat 中。我正在使用这篇文章 How to delete firebase data after "n" days试图解决。我遇到的问题:我的 firebase 数据库的这段代码正在删除所有消息,而不仅仅是我需要的消息。

我的 firebase 数据库 JSON:

{
"messages" : {
"Bl0AiMMUXsV2H58lqoj0rO84" : {
"-KYo1YqO9vQ4Fcc07TcU" : {
"dateCreatedGu" : {
"date" : 1481563061846
},
"name" : "nameOfUser",
"photoUrl" : "https://lh6.g/photo.jpg",
"text" : "h"
},
"-KYo1atRyY3VYxuTZRPZ" : {
"dateCreatedGu" : {
"date" : 1481563074335
},
"name" : "\"nameOfUser\"\"",
"photoUrl" : "https://lh6.googleusercontent.com.../-photo.jpg",
"text" : "g"
},
"-KYo1bQXtJNB94et25m2" : {
"dateCreatedGu" : {
"date" : 1481563076516
},
"name" : "Gus",
"photoUrl" : "https://lh6.../photo.jpg",
"text" : "b"
},
"-KYo4GmLdM0TyT_Aym0u" : {
"dateCreatedGu" : {
"date" : 1481563774514
},
"name" : "gus",
"photoUrl" : "https://lh6.go.../photo.jpg",
"text" : "h"
}
}
}
}

我的安卓代码 fragment :

mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference("messages");


//beginn n-days
long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS);

Query oldItems = mFirebaseDatabaseReference.orderByChild("timestamp").endAt(cutoff);
//

oldItems.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot itemSnapshot: snapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}

@Override
public void onCancelled(DatabaseError databaseError) {
}
});

//end n-days

这里的区别是我在 date 中的时间戳是在“dateCreatedGu 而不是直接在消息上,因为我使用 Map 来存储时间戳.

怎么了?我怎样才能正确地只删除我需要的消息——例如超过 30 天的消息?我试图将周期形式从 30 天更改为 30 秒到 cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.SECONDS); 以验证代码。

我尝试将 addValueEventListener 更改为添加 ChildEventListener...

我知道 orderByValue 在您不读取具有属性的对象而是直接读取属性时使用。我知道在这种情况下,最好使用 orderbyKey 优化代码,因为 key 在时间期间按字母顺序存储 - 跳跃值) - 对于优化时间戳的搜索也很有用。我了解到 addChildEventListener 尝试读取数据库中的每个值 f 存在多个消息(例如)。但我仍然没有找到如何只删除我需要的消息。我如何使用我的数据库来做到这一点?

最佳答案

由于您嵌套了时间戳,因此您需要在查询中按该嵌套属性进行排序:

Query oldItems = mFirebaseDatabaseReference.orderByChild("dateCreatedGu/date").endAt(cutoff);

关于android - 删除早于天数的消息 - 使用 MAP 的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41106772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com