如何在Firestore事务中实现getOrCreate?

时间:2018-05-22 20:46:02

标签: firebase google-cloud-firestore

我正在尝试实施引用书签服务。

  • 给出一个引用集合,它有四个信息 - quote,userId,authorId 和sourceId。
  • 鉴于作者集合,它有两个信息 - name,userId
  • 鉴于源集合,它有三个信息名称(星​​球大战),类型 (书,电影),userId

当用户尝试保存报价时,我希望有一个交易,我将检查作者是否存在(通过名称查询。如果是,则返回authorId。如果不是,则创建作者)。源+类型也是如此。作者和来源都将返回各自的ID。在保存报价期间,将使用 authorId sourceId 创建报价对象。

这种情况可能吗?我在Firestore.firestore()。事务中检查过,只有getDocument函数,我无法使用whereField()进行查询。

我已经在某处读过,我们可以通过规则强制执行创建,并在try / catch中抛出错误或某种类型,其中catch块将执行getDocument?

如果我无法在事务中执行查询而我只能依赖于getDocument,那么这是否意味着作者/源集合的ID必须是&#的复合键34; userId + hash(作者/来源' s名称)"?

执行此类行动的建议是什么?或者Firestore无法处理这样的用例?

总之,我试图这样做(伪代码)......

Firestore.transaction {

  // Get or create author
  let author = Author.getOrCreate("Yoda", userId)

  // Get or create source
  let source = Source.getOrCreate("Star Wars", "film", userId)

  // Save quote
  let quote = Quote.create({
     quote: "Do or do not. There is no try", 
     authorId: author.id, 
     sourceId: source.id, 
     userId: userId
  })

}

0 个答案:

没有答案