Firestore arrayunion 提供任何回调?
Firestore arrayunion provides any callback?
您好,我正在构建某种投票系统,我想防止同一用户在同一 post 中投票。
let db = firebase.firestore();
var postRef = db.collection("posts").doc(this.pid);
postRef.update({
votes: firebase.firestore.FieldValue.increment(1)
});
var userRef = db.collection("users").doc(this.userId);
userRef.update({
votes: firebase.firestore.FieldValue.arrayUnion(this.pid)
});
//run this line if pid is added
this.votes = this.votes + 1;
我只想在将 pid 添加到 votes 数组时增加投票。我想知道 arrayUnion 是否能够对此提供某种反馈,或者无论如何我都能做到。
你可以看看this post,你可以看到同一个人可以对同一个post进行多次投票。
遗憾的是,根据设计 increment
和 arrayUnion
不提供任何回调。
为了实现您的要求,您需要一个交易(在幕后被increment
和arrayUnion
使用):
const postRef = db.collection("posts").doc(this.pid);
const userRef = db.collection("users").doc(this.userId);
db.runTransaction(async (t) => {
const post = await t.get(postRef);
const user = await t.get(userRef);
if (!user.get('votes').includes(this.pid)) {
t.update(postRef, {votes: post.get('votes') + 1});
t.update(userRef, {votes: [...user.get('votes'), this.pid]});
}
});
您好,我正在构建某种投票系统,我想防止同一用户在同一 post 中投票。
let db = firebase.firestore();
var postRef = db.collection("posts").doc(this.pid);
postRef.update({
votes: firebase.firestore.FieldValue.increment(1)
});
var userRef = db.collection("users").doc(this.userId);
userRef.update({
votes: firebase.firestore.FieldValue.arrayUnion(this.pid)
});
//run this line if pid is added
this.votes = this.votes + 1;
我只想在将 pid 添加到 votes 数组时增加投票。我想知道 arrayUnion 是否能够对此提供某种反馈,或者无论如何我都能做到。
你可以看看this post,你可以看到同一个人可以对同一个post进行多次投票。
遗憾的是,根据设计 increment
和 arrayUnion
不提供任何回调。
为了实现您的要求,您需要一个交易(在幕后被increment
和arrayUnion
使用):
const postRef = db.collection("posts").doc(this.pid);
const userRef = db.collection("users").doc(this.userId);
db.runTransaction(async (t) => {
const post = await t.get(postRef);
const user = await t.get(userRef);
if (!user.get('votes').includes(this.pid)) {
t.update(postRef, {votes: post.get('votes') + 1});
t.update(userRef, {votes: [...user.get('votes'), this.pid]});
}
});