为所有活动项目创建索引
Creating an index for all active items
我有一组文档遵循此架构 {label: String, status: Number}
。
我想介绍一个新字段,deleted_at: Date
如果文档已被删除,它将保存信息。似乎是索引的完美用例,能够搜索所有未删除的任务。
CreateIndex({
name: "activeTasks",
source: Collection("tasks"),
terms: [
{ field: ["data", "deleted_at"] }
]
})
然后按 shell 中的未定义/空值过滤:
Paginate(Match(Index("activeTasks"), null))
Paginate(Match(Index("activeTasks"), undefined))
return没什么,即使对于我明确将 deleted_at
设置为 null
的文档也是如此。
不过,这不是我的意思。我想获取根本没有定义 deleted_at
的文档,这样我就不必更新整个集合。
PS。当我在 deleted: "test"
处添加文档并查询它时,shell 会 return 预期结果。
我没有得到什么?
原因是因为 FaunaDB 不支持读取 empty/null 值的方式与您认为的一样。你需要使用一个特殊的 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")))
)
我有一组文档遵循此架构 {label: String, status: Number}
。
我想介绍一个新字段,deleted_at: Date
如果文档已被删除,它将保存信息。似乎是索引的完美用例,能够搜索所有未删除的任务。
CreateIndex({
name: "activeTasks",
source: Collection("tasks"),
terms: [
{ field: ["data", "deleted_at"] }
]
})
然后按 shell 中的未定义/空值过滤:
Paginate(Match(Index("activeTasks"), null))
Paginate(Match(Index("activeTasks"), undefined))
return没什么,即使对于我明确将 deleted_at
设置为 null
的文档也是如此。
不过,这不是我的意思。我想获取根本没有定义 deleted_at
的文档,这样我就不必更新整个集合。
PS。当我在 deleted: "test"
处添加文档并查询它时,shell 会 return 预期结果。
我没有得到什么?
原因是因为 FaunaDB 不支持读取 empty/null 值的方式与您认为的一样。你需要使用一个特殊的 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")))
)