"Transaction was aborted due to detection of concurrent modification" 在 FaunaDB 中

"Transaction was aborted due to detection of concurrent modification" in FaunaDB

我有一个可以从许多不同的并发请求写入的文档。文档的同一部分没有改变,但它可以看到并发写入(来自 nodejs 应用程序)。
示例:

{
name: "testing",
 results: {
   a: { ... },
   b: { ... },
}

我可以用 "c" 等更新文档

如果我不异步等待事务(例如在测试中),我将得到部分写入和错误 "transaction was aborted due to detection of concurrent modification" .. 解决此问题的最佳方法是什么?我觉得 Fauna 的主要卖点是处理这样的问题,但我没有足够的知识来理解我的解决方法。

有人排队strategies/ideas/suggestions吗?

索引:

CreateIndex({
  "name": "byName",
  "unique": true,
  "source": Collection("Testing"),
  "serialized": true,
  "terms": 
    [
      { "field": [ "data", "name" ] }
    ]
})

JS AWS Lambda 函数正在编写..

目前Fauna的交易单位是单据。所以在这种情况下,我会推荐如下内容:

CreateCollection({name: "result"})
CreateCollection({name: "sub-result"})
CreateIndex({
  name: "result-agg",
  source: Collection("sub-result"),
  terms: [{"field": ["data", "parent"]}]
})

假设父项包含主要结果的引用。然后给出 $ref 作为结果 ref

Let({
  subs: Select("data", Map(Paginate(Match(Index("result-agg"), $ref)), Lambda("x", Get(Var("x")))))
  main: Select("data", Get($ref))},
  Merge(Var("main"), {results: Var("subs")})
)