Node.js NodeJS Firebase循环缓冲区或队列
我正在使用Firebase和Nodejs。我想限制Node.js NodeJS Firebase循环缓冲区或队列,node.js,firebase,firebase-realtime-database,circular-buffer,Node.js,Firebase,Firebase Realtime Database,Circular Buffer,我正在使用Firebase和Nodejs。我想限制战地报告中记录的数量,但不只是限制。如果新数据将出现,并且在战报中已有N条记录,请删除最旧的记录并添加新记录。我想实现一些类似于循环队列或缓冲区的东西。可能吗 players: { 'player1-id': { battleReports: { 'battle-report-1': {/* report object */}, 'battle-report-2': {/* report o
战地报告中记录的数量,但不只是限制。如果新数据将出现,并且在战报中已有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 */}
// ...
}
},
// ...
}
当然可以,但我建议将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()
,如果需要,还可以使用其他规则(这需要在数据库规则中使用indexOn:[]
规则)
摘要:解决方案只是创建某种排序技术,可以按键或子/值排序。然后,您只需要使用类似{newReport}
的变量侦听onCreate,或者在battleReports
上侦听childAdded
。然后使用任何技术获取最旧的密钥(自动生成时始终是第一个密钥),然后将其删除