Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS Firebase循环缓冲区或队列_Node.js_Firebase_Firebase Realtime Database_Circular Buffer - Fatal编程技术网

Node.js NodeJS Firebase循环缓冲区或队列

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

我正在使用Firebase和Nodejs。我想限制
战地报告中记录的数量,但不只是限制。如果新数据将出现,并且在
战报中已有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
。然后使用任何技术获取最旧的密钥(自动生成时始终是第一个密钥),然后将其删除