我正在使用Firebase和Nodejs。我希望将battleReports
中的记录数限制为数字N.但不仅限制。如果有新数据,battleReports
中已有N条记录,请删除最旧的数据并添加新数据。我想实现循环队列或缓冲区之类的东西。有可能吗?
players: {
'player1-id': {
battleReports: {
'battle-report-1': {/* report object */},
'battle-report-2': {/* report object */},
'battle-report-3': {/* report object */}
// ...
}
},
'player2-id': {
battleReports: {
'battle-report-1': {/* report object */},
'battle-report-2': {/* report object */},
'battle-report-3': {/* report object */}
// ...
}
},
// ...
}
答案 0 :(得分:1)
当然,但我建议将battleReports
的子项更改为使用自动生成的键(例如push
方法)。
这样,battleReports
将始终按照添加时间顺序排序。
无论如何,创建看起来像这样的数据库函数:
this.battleReportLimiter = functions.database.ref('battleReports/{newReport}').onCreate(event => {
return admin.database().ref('battleReports').orderByKey().limitToFirst(1).once('value').then(event => {
return admin.database().ref('battleReports').child(event).remove();
});
});
您不必使用自动生成的密钥和orderByKey()
,如果需要,还可以使用其他规则here(在数据库规则中需要indexOn: [<child>]
规则)。
摘要:解决方案只是通过键或子/值创建某种排序技术。然后,您只需要使用{newReport}
之类的变量来监听onCreate,或者在childAdded
上收听battleReports
。然后使用任何技术获取最旧的(在自动生成时始终是第一个键),然后将其删除。