【发布时间】:2021-07-08 23:07:12
【问题描述】:
我在使用 FaunaDB 索引时遇到了一些问题。 FQL 非常强大,但文档似乎(目前)仅限于几个示例/用例。 (按字符串搜索)
我有一个订单集合,其中包含几个字段:状态、ID、客户、材料和日期。
我的目标是根据订单的状态、打开或关闭(布尔真/假)搜索/过滤订单。
这是我创建的索引:
CreateIndex({
name: "orders_all_by_open_asc",
unique: false,
serialized: true,
source: Collection("orders"),
terms: [{ field: ["data", "status"] }],
values: [
{ field: ["data", "unique_id"] },
{ field: ["data", "client"] },
{ field: ["data", "material"] },
{ field: ["data", "date"] }
]
}
因此,对于这个索引,我想指定 TRUE 或 FALSE 并获取所有相应的订单,包括它们的数据(字段)。
我有两个问题:
- 当我使用 Javascript 驱动程序传递 TRUE 或 FALSE 时,没有返回任何内容 :( 是否可以通过布尔值进行搜索,或者仅通过字符串/数字进行搜索?
这是我的查询(在 FQL 中,使用 Shell):
Match(Index("orders_all_by_open_asc"), true)
不幸的是,没有返回任何内容。我可能做错了。
- 第二个(稍微不相关的)问题。当我创建一个索引并指定一堆值时,返回的数据似乎是数组格式,只有值,而不是字段。一个例子:
[
1001,
"client1",
"concrete",
"2021-04-13T00:00:00.000Z",
],
[
1002,
"client2",
"wood",
"2021-04-13T00:00:00.000Z",
]
这种格式对我不利,因为我的前端期望接收一个以字段为键、值作为属性的对象。示例:
data:
{
unique_id : 1001,
client : "client1",
material : "concrete",
date: "2021-04-13T00:00:00.000Z"
},
{
unique_id : 1002,
client : "client2",
material : "wood",
date: "2021-04-13T00:00:00.000Z"
},
etc..
在使用索引值时,有什么方法可以获取字段和值,还是总是返回一个数组(而不是对象)?
我可以为此使用 Lambda 或其他东西吗?
我确实有另一个使用 Map 和 Lambda 效果很好的查询,并返回整个文档,包括 Ref 和 Data 字段:
Map(
Paginate(
Match(Index("orders_by_date"), date),
),
Lambda('item', Get(Var('item')))
)
这很好用,但不幸的是,它还为每个返回的文档执行一个 Get 请求,这似乎非常低效。
我要建立的这个新索引,按订单状态过滤,将用于返回数百个订单,每天数百次。所以我试图让它尽可能高效,但如果它只能返回一个数组,它就没有用了。
提前致谢!!索引很棒,但很难掌握,因此我们将不胜感激。
【问题讨论】:
标签: faunadb