Javascript 如何使用push生成firebase增量计数器

Javascript 如何使用push生成firebase增量计数器,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,嗨。。。如何在firebase中创建增量计数器,有什么建议吗 我已经在使用这个代码了 firebase.database().ref(‘myData/' ).once('value', function(qTotal) { total = qTotal.numChildren() + 1; console.log(" counter" + total); var queId = firebase.database().ref(‘myData/').push({

嗨。。。如何在firebase中创建增量计数器,有什么建议吗 我已经在使用这个代码了

firebase.database().ref(‘myData/' ).once('value', function(qTotal) {
    total = qTotal.numChildren() + 1;
    console.log(" counter" + total);
    var queId = firebase.database().ref(‘myData/').push({
      counter : total,
      dateCreated: Date()
    }).key;
}

但有时numChildren()会在数据插入速度非常快时生成相同的计数器。

如果希望以最简单的方式执行此操作,可以使用事务:

var ref = firebase.database().ref(‘myData/' );
ref.transaction(function(qTotal) {
    var current = qTotal ? qTotal.numChildren() : 0;
    var total = current + 1;
    var queId = ref.push().key;
    qtotal[queId] = {
      counter : total,
      dateCreated: Date()
    };
    return qTotal;
}
但是在许多并发用户中增加计数器将导致可伸缩性问题。每个用户都必须下载总数据才能向其中添加项目


要了解更多关于这一点以及Firebase建议您如何为此类列表建模的信息,请阅读以下博文:

如果您希望以尽可能简单的方式进行建模,可以使用事务:

var ref = firebase.database().ref(‘myData/' );
ref.transaction(function(qTotal) {
    var current = qTotal ? qTotal.numChildren() : 0;
    var total = current + 1;
    var queId = ref.push().key;
    qtotal[queId] = {
      counter : total,
      dateCreated: Date()
    };
    return qTotal;
}
但是在许多并发用户中增加计数器将导致可伸缩性问题。每个用户都必须下载总数据才能向其中添加项目


要了解更多信息以及Firebase如何推荐您对此类列表进行建模,请阅读以下博文:

谢谢。。。那么,给每个用户一个唯一的增量号码(供他们参考)以及以先进先出的方式处理它的好方法是什么呢?您已经在调用
push()
,这会为您生成一个唯一的ID。对不起,我的意思是。。。表示人的完整数字[1,2,3…(用户知道他们的任务将在何时处理)推式生成长stringTypeError:无法在Object.update(controlers.js:2019)读取null的属性'numChildren'。谢谢。。。那么,给每个用户一个唯一的增量号码(供他们参考)以及以先进先出的方式处理它的好方法是什么呢?您已经在调用
push()
,这会为您生成一个唯一的ID。对不起,我的意思是。。。表示人的完整数字[1,2,3…(用户知道他们的任务将在何时处理)推式生成长stringTypeError:无法在Object.update(controlers.js:2019)读取null的属性'numChildren'