首页 > 解决方案 > 为所有活动项目创建索引

问题描述

我有一组遵循此架构的文档{label: String, status: Number}

我想引入一个新字段,deleted_at: Date如果文档已被删除,它将保存信息。似乎是索引的完美用例,能够搜索所有未删除的任务。

CreateIndex({
  name: "activeTasks",
  source: Collection("tasks"),
  terms: [
    { field: ["data", "deleted_at"] }
  ]
})

然后在 shell 中按 undefined / null 值过滤:

Paginate(Match(Index("activeTasks"), null))
Paginate(Match(Index("activeTasks"), undefined))

即使对于我明确设置deleted_atnull. 不过,这不是我的意思。我想获取根本没有deleted_at定义的文档,这样我就不必更新整个集合。

PS。当我在哪里添加文档deleted: "test"并查询它时,shell 确实返回了预期的结果。

我没有得到什么?

标签: faunadb

解决方案


原因是 FaunaDB 不支持像您认为的那样读取空/空值。你需要使用一个特殊Bindings的来做到这一点。

请务必查看https://docs.fauna.com/fauna/current/tutorials/indexes/bindings.html#empty以获得更详尽的解释和示例。

我对绑定如何工作的理解将产生以下代码。我还没有测试过它,我不确定它是否有效。

您需要一个特殊的绑定索引:

CreateIndex({
  name: "activeTasks",
  source: [{
    collection: Collection("tasks"),
    fields: {
      null_deleted_at: Query(
        Lambda(
          "doc",
          Equals(Select(["data", "deleted_at"], Var("doc"), null), null)
        )
      )
    }
  }],
  terms: [ {binding: "null_deleted_at"} ],
})

用法:

Map(
  Paginate(Match(Index("activeTasks"), true)),
  Lambda("X", Get(Var("X")))
)

推荐阅读