match.md 789 字节
Newer Older
M
Mars Liu 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
# 匹配

表 book 的 meta 有类似如下结构:

```json
{
  "author": [
    "Mars Liu",
    "Milly Lee"
  ],
  "ISBN": "xxxx-xxxx-xxxxxx",
  "version": 1
}
```

该字段有 gist 索引。

如果我们想高效率的找到所有作者包含 Jim Gray 的书,应该如何查询?

## 答案

```postgresql
select * from book where meta @> '{"author": ["Jim Gray"]}'::jsonb;
```

## 选项

### A

```postgresql
select * from book where meta @> '["Jim Gray"]'::jsonb;
```

### A

```postgresql
select * from book where 'Jim Gray' in meta;
```

### B

```postgresql
select * from book where meta::text like '%Jim Gray%'; 
```

### C

```postgresql
select * from book having meta @> 'Jim Gray'
```

### D

```postgresql
select * from book where 'Jim Gray' in (meta #>> 'author');
```