【问题标题】:FaunaDB returns multiple instances of the same item due to an array attribute, why?由于数组属性,FaunaDB 返回同一项目的多个实例,为什么?
【发布时间】:2021-06-20 13:45:48
【问题描述】:

正如标题所说,我目前正在将 FaunaDB 用于 React 应用程序来管理库存。我的库存集合中的每个项目都有一个销售“属性”,它是一个类似这样的数组:

"data": {
    "sales": [["2021/2/5",2],["2021/2/9",1],["2021/2/11",1],["2021/2/16",1]]
}

使用返回 data.sales 的索引时,Fauna 会多次返回相同的项目,因为它会破坏我的销售数组。这是一个使用我之前示例中的数组的示例: screenshot of my index return。 如您所见,它多次向我发送相同的项目,但每次都从我的数组中获得不同的值。我想每次请求只获取一次我的项目,将整个数组作为“属性”,我该怎么做?

【问题讨论】:

  • 您能告诉我们此类文档的索引定义吗?
  • 是的,对不起。这是screenshot
  • 对不起,我的意思是运行Get(Index("the_name_of_your_index"))的输出。

标签: node.js arrays reactjs faunadb


【解决方案1】:

Fauna 为数组中的每个元素创建一个单独的索引条目是正确的。至少有几种方法可以处理这个问题。

将数组序列化为字符串

@eskwayrd 要求提供索引定义,但由于我们没有,所以我猜您可能只将销售字段用作值,而不是用作术语。

如果您不按日期搜索,则可以将整个字段序列化为 JSON 字符串。当你需要使用它时,你可以解析它。

"data": {
    "sales": `[["2021/2/5",2],["2021/2/9",1],["2021/2/11",1],["2021/2/16",1]]`
}

将 sales 数组非规范化为不同的 Collection

如果您需要按较低数组中的任何值(例如日期或其他值)进行搜索,您可以考虑这样做。

例如:

Create(Collection("employees"), {
  data: { name: "Paul" }
})
Create(Collection("sales_stats"), {
  data: {
    employee: Ref(Collection("employees")),
    date: Date("2021-02-05"),
    count: 1
  }
})

在 FQL 中聚合数据(但可能是客户端)

FQL 足够灵活,可以执行聚合任务。例如,您可以使用Reduce 函数扫描结果并执行分组、求和、计数等操作。

如果您确实需要通过网络减少有效负载的大小,这会很有帮助。

但是,在决定对数据库执行大量常规计算时要小心,因为从长远来看,使用大量计算资源可能会花费更多。有关详细信息,请参阅Billing docs page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多