使用 javascript 在 firebase 中自动递增一个值
Auto increment a value in firebase with javascript
你好,我正在做一些 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(子值)部分应该是自动递增的,这就是我想要的。谢谢你的回答
Firebase 没有自动递增键,因为这些键在客户端可能长时间离线的大型多用户系统中效果不佳。
相反,Firebase 有自己的自动生成密钥类型,称为推送 ID。这些推送 ID 与许多关系数据库中的序列具有相同的重要属性:它们是有序的和顺序的。但除此之外,它们可以在客户端计算,即使客户端没有连接到 Firebase 服务器。
查看Firebase documentation on saving data in lists, this legacy blog post on why arrays don't work well in Firebase and this post on how push ids work。
Firebase 建议使用分布式计数器:
https://firebase.google.com/docs/firestore/solutions/counters
对于需要计数器的文档,只要您需要递增的计数器,您就可以初始化一个包含 10 个文档的子集合和 运行 随机分片上的事务递增。
然后您将查询分片集合并对它们的计数器求和。
您可以将第一列键用于 "USERID + Your_indexNumber(in client var)" 等
这个方法很简单。
你的 table 一定喜欢这个:
https://i.stack.imgur.com/k9UI6.png
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;
});
}
你好,我正在做一些 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(子值)部分应该是自动递增的,这就是我想要的。谢谢你的回答
Firebase 没有自动递增键,因为这些键在客户端可能长时间离线的大型多用户系统中效果不佳。
相反,Firebase 有自己的自动生成密钥类型,称为推送 ID。这些推送 ID 与许多关系数据库中的序列具有相同的重要属性:它们是有序的和顺序的。但除此之外,它们可以在客户端计算,即使客户端没有连接到 Firebase 服务器。
查看Firebase documentation on saving data in lists, this legacy blog post on why arrays don't work well in Firebase and this post on how push ids work。
Firebase 建议使用分布式计数器: https://firebase.google.com/docs/firestore/solutions/counters
对于需要计数器的文档,只要您需要递增的计数器,您就可以初始化一个包含 10 个文档的子集合和 运行 随机分片上的事务递增。
然后您将查询分片集合并对它们的计数器求和。
您可以将第一列键用于 "USERID + Your_indexNumber(in client var)" 等
这个方法很简单。
你的 table 一定喜欢这个:
https://i.stack.imgur.com/k9UI6.png
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;
});
}