# 查詢

本頁比較 ToriiDB 的三種掃描操作，並說明 `KEYS` 的萬用字元比對與結果的限制與排序。

## 掃描操作

| 操作 | 比對對象 | 結果項目 | 排序 |
|---|---|---|---|
| `Keys(pattern)` | 頂層鍵名 | 鍵 | 字典序 |
| `Find(op, value, limit)` | 整個原始值 | 鍵 | 最新優先 |
| `Query(filter, limit)` | JSON 文件的欄位 | `key: rawValue` | 最新優先 |

三者皆持有資料庫讀鎖，並跳過過期項目與 `__torii:*` 鍵。

## KEYS

```text
KEYS *
KEYS user:*
KEYS cache:?
```

Pattern 使用 Go `path.Match`（`*`、`?`、`[...]`）。無效 pattern 不匹配任何鍵。不解析點記法。

Daemon 的 `keys` op 另有分頁，`entries` op 另有子字串與時間篩選；見 [Socket Daemon](/zh/socket-daemon-filtering)。

## 限制與排序

`FIND` 與 `QUERY` 依 `UpdatedAt`（未設定時用 `CreatedAt`）遞減排序，再依結果文字排序。結尾 `LIMIT <n>` 且 `n > 0` 時於排序後截斷；否則回傳全部結果。超過 1024 個鍵時以每塊 1024 平行掃描，合併後再排序。

## 相關頁面

- [運算子與 FIND](/zh/querying-operators)
- [QUERY 運算式](/zh/querying-query)
- [Server 端篩選](/zh/socket-daemon-filtering)
