FaunaDB中如何基于数组子项userId字段创建查询索引?
正确创建FaunaDB嵌套数组字段索引的方法
问题根源
你之前的索引绑定逻辑有误:Select(["data", "members", "userId"]) 试图直接从members数组中提取userId,但members是数组类型而非单个对象,这个操作无法正确获取数组内每个成员的userId,导致索引未生成预期的条目。
解决方案
需要在索引绑定中遍历members数组,提取每个成员的userId。FaunaDB会自动将数组中的每个值拆分为独立的索引条目,这样同一文档内的多个userId都会关联到该文档的索引记录。
正确的索引创建代码如下:
CreateIndex({ name: 'spaces_member_ids', source: { collection: Collection("ColA"), fields: { member_user_ids: Query( Lambda( "doc", // 遍历members数组,提取每个成员的userId Map( Select(["data", "members"], Var("doc"), []), Lambda("member", Select(["userId"], Var("member"), "")) ) ) ), }, }, terms: [ { binding: "member_user_ids" }, ], values: [ { field: ["data", "name"] }, { field: ["ref"] }, ] })
验证查询
使用该索引查询userId='1'时,即可返回包含该用户的所有目标文档(Test a和Test b):
Paginate(Match(Index("spaces_member_ids"), "1"))
关键说明
Map函数用于遍历members数组,对每个成员对象提取userId- 当绑定返回数组时,FaunaDB会为数组中的每个值创建一条索引条目,关联到原文档
Select的第三个参数设为空数组/空字符串,避免因字段缺失导致索引创建失败
内容的提问来源于stack exchange,提问作者C. Molendijk
相关产品推荐
相关产品推荐

