您好我正在开发一些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(儿童价值)部分应该是自动增量,这就是我想要的。谢谢你的回答
答案 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中)”等。
这是非常简单的方法。
您的桌子必须这样: