问题描述
我正在尝试使用 FQL 使用 FaunaDB 集合中的索引更新文档。
MarshalAs
Update(
Match(
Index('users_by_id'),'user-1'
),{
data: {
name: 'John'
}
}
)
如何使用索引 Error: [
{
"position": [
"update"
],"code": "invalid argument","description": "Ref expected,Set provided."
}
]
更新文档?
解决方法
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
定义中定义的相同数量的参数。