如何删除firebase数据并每天复制一些高分数据

时间:2018-04-19 00:27:35

标签: javascript android firebase firebase-realtime-database

嗨,大家好我正在学习android编程,我使用firebase我想删除每天用户数据和谁有高分我想复制他的数据另一个孩子 这是我的数据库

project-12345
    /usersscore
        /user1   {   
            uid:user1
            timestamp:121121212
            score:125
}
        /user2{
            uid:user2
            timestamp:121121212
            score:50
              }

每天低分删除和高分用户数据复制赢家孩子`

project-12345
/winner
     /user1   {   
            uid:user1
            timestamp:121121212
            score:125

我怎么能这样做对不起我的坏英语node.js的每个教程都是另一种语言,我不明白请帮帮我谢谢。

2 个答案:

答案 0 :(得分:0)

Firebase是一个相当活跃的数据库,因为它具有创建/更新/删除数据的触发器,但对计划任务和主动操作没有太多帮助。

您可能希望查看某种类型的作业,例如计划的CRON作业,并根据需要操作数据库,我知道GCP支持这一点,Firebase和GCP沟通得很好。您还可以根据auth规则设置一个具有管理员访问权限的单独项目,并使用一个按钮来执行此操作,而不是自动化但是一个解决方案。

除此之外,您可以根据时间戳查询数据,然后获胜者根据时间戳分隔数据,找出最高分,并在最有可能获取所有数据后显示它。 / p>

答案 1 :(得分:0)

试试这个。首先是查询最高分,然后获取数据并更新您的获胜者参考

DatabaseReference mDatabasePlayers = FirebaseDatabase.getInstance().getReference().child("usersscore");
Query mDatabaseHighestPlayer = mDatabasePlayers.orderByChild("score").limitToLast(1);
mDatabaseHighestPlayer.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot){
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            Player highScore = dataSnapshot.getValue(Player.class);

            FirebaseDatabase.getInstance().getReference().child("winner").setValue(highScore);
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't swallow errors
    }
});

希望这有帮助

编辑: 要在特定时间每天运行,您必须使用计划程序。下面是一个使用AlarmManager的例子

alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

// Set the alarm to start at 6:30 PM
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 30);

// setRepeating() lets you specify a precise custom interval--in this case,
// 1 day
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY, alarmIntent);

然后在我的样本

中的AlarmReceiver广播接收器上执行上述代码
@Override
public void onReceive(Context context, Intent intent) {
   //do function here
}