我正在尝试实施引用书签服务。
当用户尝试保存报价时,我希望有一个交易,我将检查作者是否存在(通过名称查询。如果是,则返回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
})
}