[英]How to update a specific field of data only one time for each user in firesrore in firebase v9?
我正在创建一个类似 sns 的 web 应用程序,并试图实现一个“喜欢帖子”function。基本上每个帖子都有 firestore 中的数据,例如帖子的标题,帖子的图片,帖子的喜欢数量等等。我想做的是,如果用户点击任何帖子上的赞按钮,点击帖子的赞数将增加 1。但是,我不知道如何限制每个用户只能喜欢每个帖子一次。 我当前的代码适用于增加喜欢的数量,但用户可以在用户点击后喜欢帖子的次数。 我完全是 firebase、react 和 javascript 的初学者,非常感谢您的帮助。 谢谢你。
这是我的代码,用于增加喜欢的数量。
const likeHandle = async () => {
const docRef = doc(db, "posts", postId);
await updateDoc(docRef, {
noLikes: noLikes + 1
});
}
您将无法在跟踪点赞数量的同一文档中大规模执行此操作,因为每个文档都有最大大小。
您需要做的是将每对用户和点赞的记录存储在单独集合中其自己的文档中,并检查以确保任何新的点赞请求尚未在另一个集合中表示。 如果那对用户和帖子有记录,您的 UI 也应该禁用点赞,这样用户就不会看到您不希望他们选择的选项。
没有直接的方法来限制用户写入特定数据的频率。
但是,您可以做的是:
usersWhoVoted
字段添加到文档,或它下面的userWhoVoted
子集合。 您可能还应该使用原子increment
操作,以防止依赖于可能过时的客户端 state(尽管您的安全规则应该捕获并拒绝这种情况)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.