Firestore默认用户数据初始化

时间:2019-01-15 21:40:27

标签: firebase google-cloud-firestore

我正在创建一个游戏,我想为每个用户在Firestore上存储完整的游戏级别。

现在,我的问题是,我将不得不初始化一次该数据-我想为新用户添加一个文档,并为包含已完成ID / ID和布尔值(完成/未完成)的布尔值的pojo添加文件。

因此,我需要执行某种逻辑,例如“如果不存在具有该ID的文档,则添加该文档并添加默认数据,这意味着用户尚未完成任何级别”。是否有某种方式保证身份必须只执行一次此逻辑?如果您遇到问题,我想避免重复/重试等,谢谢您的建议

2 个答案:

答案 0 :(得分:1)

这就是transaction的作用(一定要阅读链接的文档)。在您的交易中,您可以阅读该文档以查明该文档是否存在,然后如果不存在则编写该文档。

或者,您也许可以摆脱set() with merge。如果文档不存在,则合并设置操作将创建该文档,然后使用您指定的数据更新该文档。

答案 1 :(得分:1)

创建尚不存在的文档的典型方法是使用事务。基于documentation on transactions中的示例代码:

Require Import Coq.Arith.Arith.
Require Import Coq.Lists.List.

Definition intersection (l1 l2 : list nat) : list nat :=
  List.filter (fun n => List.existsb (Nat.eqb n) l2) l1.

Lemma intersectionP l1 l2 n : In n (intersection l1 l2) <-> In n l1 /\ In n l2.
Proof.
unfold intersection.
rewrite filter_In, existsb_exists; split.
- intros [H1 [m [H2 e]]]; split; trivial.
  rewrite Nat.eqb_eq in e; congruence.
- intros [H1 H2]; split; trivial.
  now exists n; split; trivial; rewrite Nat.eqb_refl.
Qed.

另请参阅: