无法按 FaunaDB 中的索引更新文档

Cannot update document by index in FaunaDB

我正在尝试使用 FQL 使用我的 FaunaDB 集合中的索引来更新文档。

Update(
  Match(
    Index('users_by_id'),
    'user-1'
  ),
  {
    data: {
      name: 'John'
    }
  }
)

这个查询给我以下错误:

Error: [
  {
    "position": [
      "update"
    ],
    "code": "invalid argument",
    "description": "Ref expected, Set provided."
  }
]

如何使用索引 users_by_id 更新文档?

Match returns 集合引用,而不是文档引用,因为可能有零个或多个匹配文档。

如果您确定只有一个文档匹配,您可以使用Get。当您使用集合引用(而不是文档引用)调用 Get 时,将检索集合的第一项。由于 Update 需要文档引用,因此您可以使用 Select 检索获取的文档的引用。

例如:

Update(
  Select(
    "ref",
    Get(Match(Index('users_by_id'), 'user-1'))
  ),
  {
    data: {
      name: 'John'
    }
  }
)

如果您有多个匹配项,您应该使用 Paginate 将集合“实现”为匹配文档数组,然后 Map 在该数组上执行批量更新:

Map(
  Paginate(
    Match(Index('users_by_id'), 'user-1')
  ),
  Lambda(
    "ref",
    Update(
      Var("ref"),
      {
        data: {
          name: "John",
        }
      }
    )
  )
)

注意:为此,您的索引必须有一个空的 values 定义,或者必须将 ref 字段明确定义为唯一值。如果您的索引 returns 多个字段,则必须更新 Lambda 函数以接受与索引的 values 定义中定义的相同数量的参数。