【问题标题】:Cannot update document by index in FaunaDB无法在 FaunaDB 中按索引更新文档
【发布时间】:2021-08-03 06:04:38
【问题描述】:

我正在尝试使用 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 更新文档?

【问题讨论】:

    标签: faunadb


    【解决方案1】:

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

    如果您确定有一个文档匹配,您可以使用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 字段定义为唯一的值。如果您的索引返回多个字段,则必须更新 Lambda 函数以接受与索引的 values 定义中定义的相同数量的参数。

    【讨论】:

    • 我没有时间测试你的答案,但我相信它确实有效,哈哈,谢谢!
    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2017-02-27
    • 2012-04-05
    • 2011-07-10
    相关资源
    最近更新 更多