Index return "data" field 完全在 fauna db
Index return "data" field entirely in fauna db
我正在尝试创建一个索引,returns 集合中文档的整个数据对象;
这是代码:
CreateIndex({
name: "users_by_data",
source: Collection("users"),
values: { field: ['data'] }
})
但创建后它说:Values Not set (using ref by default)
如果我专门定义字段(分别按名称),它将按预期运行,但 data
不起作用。问题是:
这是不可能的(例如出于性能原因)还是我做错了?
旁注:我知道我可以在 Paginate
上执行 Lambda
函数并获得类似的结果,但这个问题具体是关于 Index
级别的;
您目前可以对常规值(字符串、数字、日期等)进行索引,并且可以对数组进行索引,该数组或多或少 'unroll' 将数组分为单独的索引条目。但是,您正在尝试的是,此时无法为对象建立索引。如果您尝试索引一个对象(如数据),它将被忽略。
目前,您有两个选择:
- 如您所述,在查询时使用 Map/Get。
- 列出索引中数据对象的所有值,因为您可以 select 索引中对象的特定值(但是,如果新属性稍后到达对象,则灵活性较低)
我们打算在将来支持对象索引,不过我还不能提供预计到达时间。我们的论坛上也有一个功能请求,您可以投票:https://forums.fauna.com/t/object-as-terms-instead-of-scalar-s/628
如果您只想返回数据字段,则需要对从索引返回的 Ref 使用 Select 函数。
对于单个文档,您可以这样做
Select( "data",
Get(
Match(
Index("yourIndexName"),
**yourIndexTerm // Could point to String/Number/FQL Ref
)
)
)
对于文档列表,您可以像您所说的那样使用分页,但您仍然可以从每个文档中提取数据属性
Map(
Paginate(
Match(
Index("yourIndexName"),
**yourIndexTerm // Could point to String/Number/FQL Ref
)
),
Lambda("doc", Select("data", Get(Var("doc"))))
)
我正在尝试创建一个索引,returns 集合中文档的整个数据对象; 这是代码:
CreateIndex({
name: "users_by_data",
source: Collection("users"),
values: { field: ['data'] }
})
但创建后它说:Values Not set (using ref by default)
如果我专门定义字段(分别按名称),它将按预期运行,但 data
不起作用。问题是:
这是不可能的(例如出于性能原因)还是我做错了?
旁注:我知道我可以在 Paginate
上执行 Lambda
函数并获得类似的结果,但这个问题具体是关于 Index
级别的;
您目前可以对常规值(字符串、数字、日期等)进行索引,并且可以对数组进行索引,该数组或多或少 'unroll' 将数组分为单独的索引条目。但是,您正在尝试的是,此时无法为对象建立索引。如果您尝试索引一个对象(如数据),它将被忽略。
目前,您有两个选择:
- 如您所述,在查询时使用 Map/Get。
- 列出索引中数据对象的所有值,因为您可以 select 索引中对象的特定值(但是,如果新属性稍后到达对象,则灵活性较低)
我们打算在将来支持对象索引,不过我还不能提供预计到达时间。我们的论坛上也有一个功能请求,您可以投票:https://forums.fauna.com/t/object-as-terms-instead-of-scalar-s/628
如果您只想返回数据字段,则需要对从索引返回的 Ref 使用 Select 函数。
对于单个文档,您可以这样做
Select( "data",
Get(
Match(
Index("yourIndexName"),
**yourIndexTerm // Could point to String/Number/FQL Ref
)
)
)
对于文档列表,您可以像您所说的那样使用分页,但您仍然可以从每个文档中提取数据属性
Map(
Paginate(
Match(
Index("yourIndexName"),
**yourIndexTerm // Could point to String/Number/FQL Ref
)
),
Lambda("doc", Select("data", Get(Var("doc"))))
)