文件

查詢

使用 ToriiDB 掃描指令搜尋 key、比較 stored value,並篩選 JSON 文件。

查詢指令

指令 範圍 結果排序
KEYS 頂層 key name 字典順序
FIND 完整 raw entry value 最新 entry 優先
QUERY JSON 文件內的 field 最新 entry 優先

所有掃描指令都會略過已過期 entry 與保留的 __torii:* internal key。

KEYS

KEYS <pattern>

KEYS 對每個頂層 key 套用 Go path.Match

KEYS *
KEYS user:*
KEYS cache:?

無效 pattern 不會匹配。結果依字典順序排序。這裡不解讀點記法,pattern 會與完整頂層 key 比對。

FIND

FIND <op> <value> [LIMIT <n>]

FIND 比較每個 entry 的完整 raw value:

FIND eq active
FIND gt 100 LIMIT 20
FIND like *database* LIMIT 10

支援運算子如下:

名稱 意義
EQ, = 字串完全相等
NE, != 字串不相等
GT, > 數值大於
GTE, GE, >= 數值大於等於
LT, < 數值小於
LTE, LE, <= 數值小於等於
LIKE 文字 pattern matching

數值運算子只有在 stored value 與 target value 都能解析為 floating-point number 時才可能匹配。

LIKE Pattern

LIKE 對開頭與結尾的 * 有特殊處理:

Pattern 匹配行為
prefix* Stored value 以 prefix 開頭
*suffix Stored value 以 suffix 結尾
*part* Stored value 包含 part
part Stored value 包含 part
* 匹配所有 value

這是文字 matcher,不是 regular-expression engine。

QUERY

QUERY <expression> [LIMIT <n>]

QUERY 對 parsed JSON document 計算 condition。Field name 可使用點記法:

QUERY active = true
QUERY profile.level >= 3
QUERY role = admin AND active = true LIMIT 20
QUERY ( role = admin OR role = editor ) AND NOT disabled = true

非 JSON entry,或 parsed cache 不可用的 entry,會被略過。缺少 field 時不符合 condition。

表達式文法

Expression parser 支援:

expression := or
or         := and (OR and)*
and        := not (AND not)*
not        := NOT not | primary
primary    := "(" expression ")" | field operator value

Operator name 不分大小寫。AND 優先於 ORNOT 會遞迴套用到下一個 expression。

輸入以空白 tokenization。Parser 會剝除開頭 ( 與結尾 ),因此括號可貼在相鄰 token;但 value 本身無法把未引用的空白視為單一 operand。

程式化 Filter

filter package 提供可組合 filter:

f := filter.And{
    filter.GTE{Field: "profile.level", Value: "3"},
    filter.EQ{Field: "active", Value: "true"},
}
keys := db.Query(f, 20)

可用 condition type 包含 EQNEGTGTEGELTLTELELIKEfilter.AtoFilter 可解析與 QUERY 指令相同的 infix grammar。

限制與排序

FINDQUERY 優先使用 UpdatedAt,否則使用 CreatedAt,將最新 match 排在前面;timestamp 相同時以 display text 決定順序。尾端正數 LIMIT n 會在排序後截斷;省略或無效 limit 代表沒有明確限制。

大型掃描會把 key 以 1024 個一組分塊處理,合併結果後再排序。

相關頁面

EN