如何增加 Firebase 中的记录?
How to increment a record in Firebase?
我有每个用户的 Firebase 记录 "searches: 0"。在某些情况下,我想将当前计数加 1。我已经走到这一步了,但由于某种原因,它不起作用:
du.fbAddSearchCount = function() {
var usr = new Firebase(firebase_url + "/users/" + user_uid);
usr.on("value", function(snapshot) {
user = snapshot.val();
var usersRef = ref.child("users");
var fbUser = usersRef.child(user_uid);
fbUser.update( {
searches: user.searches + 1
});
}
}
有什么帮助可以让它正常工作吗?
谢谢。
您可以使用交易
var databaseRef = firebase.database().ref('users').child(user_uid).child('searches');
databaseRef.transaction(function(searches) {
if (searches) {
searches = searches + 1;
}
return searches;
});
ref.transection(function(queue_length) {
if(queue_length|| (queue_length === 0))
{
queue_length++;
}
return queue_length;
})
你可以这样使用;)
对于实时数据库,使用transaction
似乎是最好的方法。参见
来自他的回答和相关评论:
firebase
.database()
.ref('users')
.child(user_uid)
.child('searches')
.transaction(function(searches) {
return (searches || 0) + 1
})
对于 Firestore 数据库,您可以使用 Firebase Sentinel values 到 increment/decrement 一个值,而无需先获取它
增量
firebase
.firestore()
.collection('users')
.doc('some-user')
.update({
valueToIncrement: firebase.firestore.FieldValue.increment(1)
})
递减
firebase
.firestore()
.collection('users')
.doc('some-user')
.update({
valueToDecrement: firebase.firestore.FieldValue.increment(-1)
})
database.ref("users").child("user_uid").transaction((user) => {
if (user) {
user.searches = actives.searches + 1;
}
return user;
});
它适合你。
我做了那个 '.child('searches')' 但它不起作用。(没有改变)。
在 firebase JavaScript SDK v7.14.0
中有一个新方法 ServerValue.increment()
它的性能更好,而且更便宜,因为不需要往返。
见here
Added ServerValue.increment() to support atomic field value increments without transactions.
API 文档 here
用法示例:
firebase.database()
.ref('users')
.child(user_uid)
.child('searches')
.set(firebase.database.ServerValue.increment(1))
或者你可以递减,只需将 -1
作为函数参数,如下所示:
firebase.database()
.ref('users')
.child(user_uid)
.child('searches')
.set(firebase.database.ServerValue.increment(-1))
对于 实时数据库,使用 increment()
效果很好 - 这是一个使用较新的 ESM 语法的客户端 JS 示例
import { getDatabase, ref, set, increment } from "https://www.gstatic.com/firebasejs/9.1.3/firebase-database.js";
// Initialize Firebase
const firebaseConfig = { ...};
const app = initializeApp(firebaseConfig);
const writeFavNameData = name => {
const db = getDatabase();
const favRef = ref(db, 'favorites/' + name);
set(favRef, {
name,
likes: increment(1)
});
};
writeFavNameData("Petunia"); // `likes` is initialized at 1
writeFavNameData("Petunia"); // `likes` is now 2
我有每个用户的 Firebase 记录 "searches: 0"。在某些情况下,我想将当前计数加 1。我已经走到这一步了,但由于某种原因,它不起作用:
du.fbAddSearchCount = function() {
var usr = new Firebase(firebase_url + "/users/" + user_uid);
usr.on("value", function(snapshot) {
user = snapshot.val();
var usersRef = ref.child("users");
var fbUser = usersRef.child(user_uid);
fbUser.update( {
searches: user.searches + 1
});
}
}
有什么帮助可以让它正常工作吗?
谢谢。
您可以使用交易
var databaseRef = firebase.database().ref('users').child(user_uid).child('searches');
databaseRef.transaction(function(searches) {
if (searches) {
searches = searches + 1;
}
return searches;
});
ref.transection(function(queue_length) {
if(queue_length|| (queue_length === 0))
{
queue_length++;
}
return queue_length;
})
你可以这样使用;)
对于实时数据库,使用transaction
似乎是最好的方法。参见
来自他的回答和相关评论:
firebase
.database()
.ref('users')
.child(user_uid)
.child('searches')
.transaction(function(searches) {
return (searches || 0) + 1
})
对于 Firestore 数据库,您可以使用 Firebase Sentinel values 到 increment/decrement 一个值,而无需先获取它
增量
firebase
.firestore()
.collection('users')
.doc('some-user')
.update({
valueToIncrement: firebase.firestore.FieldValue.increment(1)
})
递减
firebase
.firestore()
.collection('users')
.doc('some-user')
.update({
valueToDecrement: firebase.firestore.FieldValue.increment(-1)
})
database.ref("users").child("user_uid").transaction((user) => {
if (user) {
user.searches = actives.searches + 1;
}
return user;
});
它适合你。 我做了那个 '.child('searches')' 但它不起作用。(没有改变)。
在 firebase JavaScript SDK v7.14.0
中有一个新方法ServerValue.increment()
它的性能更好,而且更便宜,因为不需要往返。
见here
Added ServerValue.increment() to support atomic field value increments without transactions.
API 文档 here
用法示例:
firebase.database()
.ref('users')
.child(user_uid)
.child('searches')
.set(firebase.database.ServerValue.increment(1))
或者你可以递减,只需将 -1
作为函数参数,如下所示:
firebase.database()
.ref('users')
.child(user_uid)
.child('searches')
.set(firebase.database.ServerValue.increment(-1))
对于 实时数据库,使用 increment()
效果很好 - 这是一个使用较新的 ESM 语法的客户端 JS 示例
import { getDatabase, ref, set, increment } from "https://www.gstatic.com/firebasejs/9.1.3/firebase-database.js";
// Initialize Firebase
const firebaseConfig = { ...};
const app = initializeApp(firebaseConfig);
const writeFavNameData = name => {
const db = getDatabase();
const favRef = ref(db, 'favorites/' + name);
set(favRef, {
name,
likes: increment(1)
});
};
writeFavNameData("Petunia"); // `likes` is initialized at 1
writeFavNameData("Petunia"); // `likes` is now 2