使用javascript自动增加firebase中的值

IT技术 javascript firebase firebase-realtime-database auto-increment
2021-03-19 11:13:44

你好,我正在做一些 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>

结果是这样的

{
    "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个回答

Firebase 没有自动递增的键,因为它们在客户端可能长时间离线的大规模多用户系统中不能很好地工作。

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

请参阅上表中的数据保存火力地堡文档,这个传统的博客文章为什么数组不火力地堡中很好地工作,这职位上推IDS如何工作

最后的数字看起来像一个数组索引,因此不会缩放。我提供的链接比我在这里能更好地解释原因。如果您坚持使用自定义序列,则必须自己实现它们。Firebase 没有对它们的内置支持。
2021-04-22 11:13:44
是的,根据您给我的链接,该默认属性可以更好地工作,谢谢。您的回答让我重新寻找我的应用程序。祝你今天过得愉快
2021-04-22 11:13:44
谢谢你回答我的问题。但是当我使用该方法创建随机密钥时,我想问你一些问题,我只是想知道是否有任何方法可以使用 javascript 创建自定义增量。就像用户添加数据时自动增加数据一样。例如第一个帖子duyuru1,第二个帖子duyuru2,等等。
2021-05-10 11:13:44

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

对于需要计数器的文档,您可以初始化一个包含 10 个文档的子集合,并在需要计数器递增时在随机分片上运行事务递增。

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

firebase 中没有 AutoId 但这里有一种设置为自动 id 的快速方法

例如 ;

1- 创建你的模型(你将把哪个模型作为模型发送到 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);

我试过了,效果很好

祝你今天过得愉快 !!!

恕我直言,我认为我们应该使用事务来保存 increment_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;
  });
}

您可以将第一列键用于“USERID + Your_indexNumber(in client var)”等。

这是非常简单的方法。

你的桌子必须是这样的:

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