使用javascript

时间:2016-08-21 15:19:30

标签: javascript firebase firebase-realtime-database auto-increment

您好我正在开发一些firebase项目,我可以通过javascript将我的数据保存到firebase数据库中。但我无法弄明白我的数据库自动增加子值(我的孩子值是duyuru,你可以在下面看到详细信息)。我在下面分享我的代码你可以给我提示解决这个问题。

  <script>

      // Initialize Firebase
      var config = {
        apiKey: "sample1",
        authDomain: "sample2",
        databaseURL: "sample3",
        storageBucket: "sample4",
      };


      firebase.initializeApp(config);
      var database = firebase.database();

     firebase.initializeApp(config);
  var database = firebase.database();

  function writeUserData(userId, name, email, imageUrl) {
  var kategori1 =  document.getElementById("kategori").value;
  var duyuru1 = document.getElementById("duyuru").value;
  var name1 = document.getElementById("name").value;
  var email1 = document.getElementById("email").value;
  var imageUrl1 = document.getElementById("imageUrl").value;





  firebase.database().ref(kategori1 +"/" + duyuru1).set({
    username: name1,
    email: email1,
    profile_picture : imageUrl1
  });
}

    </script>

并且out就像这样

{
    "duyuru1": {
        "email": "kjfdlkl",
        "profile_picture": "dsfsd",
        "username": "meraha"
    }
}

我想输出像;

这样的数据
{
    "duyuru1": {
        "email": "kjfdlkl",
        "profile_picture": "dsfsd",
        "username": "meraha"
    },

    "duyuru2": {
        "email": "kjfdlkl",
        "profile_picture": "dsfsd",
        "username": "meraha"
    }
}

duyuru(儿童价值)部分应该是自动增量,这就是我想要的。谢谢你的回答

5 个答案:

答案 0 :(得分:16)

Firebase没有自动递增密钥,因为这些密钥在大型多用户系统中运行良好,客户端可以长时间离线。

相反,Firebase有自己类型的自动生成密钥,称为推送ID。这些推送ID在许多关系数据库中具有与序列相同的重要属性:它们是有序的和顺序的。但此外,即使客户端未连接到Firebase服务器,也可以在客户端计算它们。

请参阅Firebase documentation on saving data in lists,此遗产blog post on why arrays don't work well in Firebase和此post on how push ids work

答案 1 :(得分:2)

Firebase建议使用分布式计数器: https://firebase.google.com/docs/firestore/solutions/counters

对于需要计数器的文档,您初始化了10个文档的子集合,并在需要增加计数器的时候对随机分片运行事务增量。

然后,您将查询分片的集合并对其计数器求和。

答案 2 :(得分:1)

firebase中没有自动编号,但这是一种设置为自动编号的快速方法

例如;

1-创建yourModel(您将其作为模型发送到firebase)

2- DatabaseReference firebaseDatabase;

3- firebaseDatabase =FirebaseDatabase.instance.reference();

4- firebaseDatabase.child("table_name").push().set( yourModel.toJson() );

为了获取数据,您可以编写类似的代码

var result= firebaseDatabase.child("table_name").once().then(
   (DataSnapshot datasnapshot){
     Map<dynamic,dynamic> values= datasnapshot.value;
     values.forEach((key,value){
       print("key:"+key+" value:"+value["name"]);
     });
   }
 );
 print(result);

我尝试过并且效果很好

祝你有美好的一天!

答案 3 :(得分:1)

恕我直言,我认为我们应该使用事务来保存增量ID。请在这里看看:https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions

function toggleStar(postRef, uid) {
  postRef.transaction(function(post) {
    if (post) {
      if (post.stars && post.stars[uid]) {
        post.starCount--;
        post.stars[uid] = null;
      } else {
        post.starCount++;
        if (!post.stars) {
          post.stars = {};
        }
        post.stars[uid] = true;
      }
    }
    return post;
  });
}

答案 4 :(得分:0)

您可以将第一列键用于“ USERID + Your_indexNumber(在客户端var中)”等。

这是非常简单的方法。

您的桌子必须这样:

https://i.stack.imgur.com/k9UI6.png