如何使用短自动递增键

时间:2018-03-30 13:58:00

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

在应用程序中,我希望有非常特殊网址的短链接。

当存储第一个对象时,我希望它的键为“a”,然后跟“b”一样,最多可能是...... abc..n,而不是那些有点丑陋的火力键网址。

另外,我不能使用谷歌网址缩短器,这应该是应用程序自己的域名,以满足客户的要求。

  1. 有没有办法经济地做到这一点。
  2. 保持唯一键。
  3. 没有多个用户写入相同的密钥并替换它。
  4. 这一切都在Firebase功能后端完成,请尽可能显示代码示例。

    仍然在普通数据库上,还没有Firestore。

    修改

    好的,我想我可以使用横切增加一些数字,成功后,将数字作为新的唯一键并写入另一个位置。

    但我似乎无法用Javascript找出完成部分,但对于Java,这很清楚。如何使用Javascript获取以下版本。

    来自 :: https://firebase.google.com/docs/database/admin/save-data#section-transactions

    DatabaseReference upvotesRef = ref.child("links/autoincIndex");
    upvotesRef.runTransaction(new Transaction.Handler() {
      @Override
      public Transaction.Result doTransaction(MutableData mutableData) {
        Integer currentValue = mutableData.getValue(Integer.class);
        if (currentValue == null) {
          mutableData.setValue(1);
        } else {
          mutableData.setValue(currentValue + 1);
        }
    
        return Transaction.success(mutableData);
      }
    
      @Override
      public void onComplete(DatabaseError e, boolean b, DataSnapshot s) {
        //I could ...
         if(e == null && b){
             String newAutoKey = s.val();
             db.child("links").child(newAutoKey).set(supposedPayload);
         }
      }
    });
    

    编辑:: 好的,我最终得到了这个,虽然不是基于字母的,但它至少到了那里。

    return src.child('autoId').transaction(function (d) {
            return (d || 0) + 1;
    }, function (e, committed, snapshot) {
        if (e) {
             console.log('Failed abnormally!', e);
             return;
        }
        return objRef.child(snapshot.val()).set(payload);
    });
    

0 个答案:

没有答案