Skip to content

捷径

捷径 提供了一种简单灵活的定义 Memos 的查询条件的方式。通过捷径,你可以将复杂的查询条件封装为可重复使用的查询格式。这很便于快速使用标签、可见性、创建日期等属性快速查询记录。

在这篇文档中,我们将会聚焦于 如何编写过滤条件,并为不同的用例举例。

如何编写过滤器

捷径中的 filter 字段是你定义的筛选条件,并且只有当记录全部满足条件时才会被选中。filter 使用 CEL(通用表达式语言) 语法来组合各种运算符和查询条件。

过滤器中的关键组成部分

  1. 查询条件:这些是你想要过滤的备忘录的字段或属性。
  1. 运算符:定义了如何比对过滤条件(例如等于、不等于、大于)。
  1. 逻辑运算符:允许你使用逻辑运算(AND、OR、NOT)将多个条件组合在一起。

查询条件和支持的运算符

查询条件支持的运算符
tagin
visibility==, !=, in
contentcontains, ==, !=,
create_time==, !=, <, >, <=, >=
update_time==, !=, <, >, <=, >=

支持的查询条件

  1. tag:分配给记录的标签列表(例如 tag in ["标签1", "标签2"])。
  1. visibility:记录的可见性(例如 visibility in ["PUBLIC"])。
  1. content:记录的内容(例如 content.contains("笔记"))。
  1. create_time:创建记录的时间戳(例如 create_time == "2023-01-01T00:00:00Z")。
  1. update_time: 更新记录的时间戳 (例如 update_time > "2023-01-01T00:00:00Z")。

支持的运算符

  1. 比较运算符
  • ==: 等于 (例如 create_time == "2023-01-01T00:00:00Z")。
  • !=: 不等于 (例如 visibility != "PRIVATE")。
  • <: 小于 (例如 create_time < "2023-01-01T00:00:00Z")。
  • >: 大于 (例如 update_time > "2023-01-01T00:00:00Z")。
  • <=: 小于等于 (例如 create_time <= "2023-01-01T00:00:00Z")。
  • >=: 大于等于 (例如 update_time >= "2023-01-01T00:00:00Z")。
  1. 集合运算符
  • in: 用于检查一个元素是否属于一个集合 (例如 tag in ["标签1", "标签2"])。
  1. 字符串运算
  • contains: 用于检查一个字符串中是否包含给定子串 (例如 content.contains("日记"))。
  1. 逻辑运算符
  • &&: 逻辑与,用于组合多个条件 (例如 tag in ["tag1", "tag2"] && visibility == "PUBLIC")。
  • ||: 逻辑或,用于组合多个条件,其中任意条件为真都将满足此查询 (例如 tag in ["标签1", "标签2"] || visibility == "PRIVATE")。
  • !: 逻辑非,用于给查询条件取反 (例如 !content.contains("日记"))。

编写过滤器

下面是一些示例,展示了如何使用不同的运算符和条件来编写过滤器:

1. 简单的标签过滤

这个过滤器选中了包含标签 标签1标签2 的记录。

tag in ["标签1", "标签2"]

2. 通过标签和可见性过滤

这个过滤器选中了具有标签 标签1标签2的,同时 可见性设置为 PUBLIC 的记录。

tag in ["标签1", "标签2"] && visibility == "PUBLIC"

3. 使用 OR 进行多标签过滤

这个过滤器选中了具有 标签1标签2标签3标签4 的记录。

tag in ["标签1", "标签2"] || tag in ["标签3", "标签4"]

4. 使用 AND 和 OR 组合复杂的条件

这个过滤器选中了满足如下条件的记录:

  • 标签1标签2 标签。
  • 并且 创建时间早于 2023-01-01
  • 或者 可见性是 PRIVARE
(tag in ["标签1", "标签2"] && create_time < "2023-01-01T00:00:00Z") || visibility == "PRIVATE"

5. Filter by Date Range

This filter selects memos that were created after 2023-01-01 and before 2023-12-31.

create_time > "2023-01-01T00:00:00Z" && create_time < "2023-12-31T23:59:59Z"

6. 使用逻辑非筛选内容和标签

这个过滤器选中了内容中包含单词 日记并且可见性是 PUBLIC 的记录。

!content.contains("日记") && visibility == "PUBLIC"

7. 使用多条逻辑运算筛选

这个过滤器选中了满足如下条件的记录:

  • 标签中包含 标签1标签2
  • 并且 创建时间早于 2023-01-01
  • 并且 内容中包含 日记
(tag in ["标签1", "标签2"] && create_time < "2023-01-01T00:00:00Z") && content.contains("日记")

8. 使用带有时间的条件进行筛选

这个过滤器选中了满足如下条件的记录:

  • 2023-01-01 之后更新过
  • 或者2023-01-01 之前创建
update_time > "2023-01-01T00:00:00Z" || create_time < "2023-01-01T00:00:00Z"

9. 使用标签和可见性过滤(多个标签)

这个过滤器选中了标签中具有 标签1标签2标签3 其中之一、并且可见性设置为 PUBLICPRIVATE 的记录。

tag in ["标签1", "标签2", "标签3"] && visibility in ["PUBLIC", "PRIVATE"]

过滤器语法总结

  1. 比较字段 运算符 值(例如 create_time == "2023-01-01T00:00:00Z")。
  1. 逻辑 与条件1 && 条件2 (例如 tag in ["标签1", "标签2"] && visibility == "PUBLIC").
  1. 逻辑 或条件1 || 条件2 (例如 tag in ["标签1", "标签2"] || visibility == "PRIVATE")。
  1. 逻辑 非!条件(例如 !content.contains("日记"))。
  1. 集合判断字段 in [值1, 值2](例如 tag in ["标签1", "标签2"])。
  1. 字符串匹配字段.contains("子串")(例如 content.contains("日记"))。

总结

捷径中的 filter 字段允许你定义灵活且强大的查询条件来查询你的记录。通过将查询条件、运算符、逻辑表达式组合在一起,你可以制作出精确的符合你的需求的复杂过滤器。使用 &&||! 等逻辑运算符来构建复合查询条件,并利用比较、集合和字符串运算符进行更细粒度的过滤。

最后更新于: