-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRethinkDB.html
454 lines (454 loc) · 118 KB
/
RethinkDB.html
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- common.css -->
<style>* {-webkit-tap-highlight-color: rgba(0,0,0,0);}html {-webkit-text-size-adjust: none;}body {font-family: Arial, Helvetica, sans-serif;margin: 0;color: #333;word-wrap: break-word;}h1, h2, h3, h4, h5, h6 {line-height: 1.1;}img {max-width: 100% !important;}blockquote {margin: 0;padding: 0 15px;color: #777;border-left: 4px solid #ddd;}hr {background-color: #ddd;border: 0;height: 1px;margin: 15px 0;}code {font-family: Menlo, Consolas, 'Ubuntu Mono', Monaco, 'source-code-pro', monospace;line-height: 1.4;margin: 0;padding: 0.2em 0;font-size: 85%;background-color: rgba(0,0,0,0.04);border-radius: 3px;}pre > code {margin: 0;padding: 0;font-size: 100%;word-break: normal;background: transparent;border: 0;}ol {list-style-type: decimal;}ol ol, ul ol {list-style-type: lower-latin;}ol ol ol, ul ol ol, ul ul ol, ol ul ol {list-style-type: lower-roman;}table {border-spacing: 0;border-collapse: collapse;margin-top: 0;margin-bottom: 16px;}table th {font-weight: bold;}table th, table td {padding: 6px 13px;border: 1px solid #ddd;}table tr {border-top: 1px solid #ccc;}table tr:nth-child(even) {background-color: #f8f8f8;}input[type="checkbox"] {cursor: default;margin-right: 0.5em;font-size: 13px;}.task-list-item {list-style-type: none;}.task-list-item+.task-list-item {margin-top: 3px;}.task-list-item input {float: left;margin: 0.3em 1em 0.25em -1.6em;vertical-align: middle;}#tag-field {margin: 8px 2px 10px;}#tag-field .tag {display: inline-block;background: #cadff3;border-radius: 4px;padding: 1px 8px;color: black;font-size: 12px;margin-right: 10px;line-height: 1.4;}</style>
<!-- ace-static.css -->
<style>.ace_static_highlight {white-space: pre-wrap;}.ace_static_highlight .ace_gutter {width: 2em;text-align: right;padding: 0 3px 0 0;margin-right: 3px;}.ace_static_highlight.ace_show_gutter .ace_line {padding-left: 2.6em;}.ace_static_highlight .ace_line {position: relative;}.ace_static_highlight .ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;top: 0;bottom: 0;left: 0;position: absolute;}.ace_static_highlight .ace_gutter-cell:before {content: counter(ace_line, decimal);counter-increment: ace_line;}.ace_static_highlight {counter-reset: ace_line;}</style>
<style>.ace-xcode .ace_gutter {background: #e8e8e8;color: #333}.ace-xcode .ace_print-margin {width: 1px;background: #e8e8e8}.ace-xcode {background-color: #FFFFFF;color: #000000}.ace-xcode .ace_cursor {color: #000000}.ace-xcode .ace_marker-layer .ace_selection {background: #B5D5FF}.ace-xcode.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;border-radius: 2px}.ace-xcode .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-xcode .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-xcode .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_marker-layer .ace_selected-word {border: 1px solid #B5D5FF}.ace-xcode .ace_constant.ace_language,.ace-xcode .ace_keyword,.ace-xcode .ace_meta,.ace-xcode .ace_variable.ace_language {color: #C800A4}.ace-xcode .ace_invisible {color: #BFBFBF}.ace-xcode .ace_constant.ace_character,.ace-xcode .ace_constant.ace_other {color: #275A5E}.ace-xcode .ace_constant.ace_numeric {color: #3A00DC}.ace-xcode .ace_entity.ace_other.ace_attribute-name,.ace-xcode .ace_support.ace_constant,.ace-xcode .ace_support.ace_function {color: #450084}.ace-xcode .ace_fold {background-color: #C800A4;border-color: #000000}.ace-xcode .ace_entity.ace_name.ace_tag,.ace-xcode .ace_support.ace_class,.ace-xcode .ace_support.ace_type {color: #790EAD}.ace-xcode .ace_storage {color: #C900A4}.ace-xcode .ace_string {color: #DF0002}.ace-xcode .ace_comment {color: #008E00}.ace-xcode .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y}</style>
<!-- export.css -->
<style>
body{margin:0 auto;max-width:800px;line-height:1.4}
#nav{margin:5px 0 10px;font-size:15px}
#titlearea{border-bottom:1px solid #ccc;font-size:17px;padding:10px 0;}
#contentarea{font-size:15px;margin:16px 0}
.cell{outline:0;min-height:20px;margin:5px 0;padding:5px 0;}
.code-cell{font-family:Menlo,Consolas,'Ubuntu Mono',Monaco,'source-code-pro',monospace;font-size:12px;}
.latex-cell{white-space:pre-wrap;}
</style>
<!-- User CSS -->
<style> .text-cell {font-size: 15px;}.code-cell {font-size: 12px;}.markdown-cell {font-size: 15px;}.latex-cell {font-size: 15px;}</style>
</head>
<body>
<div id="nav"><div>Next: <a href='RethinkDB 範例程式.html'>RethinkDB 範例程式</a>, Previous: <a href='WebSocket 範例程式.html'>WebSocket 範例程式</a>, Up: <a href='index.html'>Index</a></div></div>
<div id="titlearea">
<h2>RethinkDB</h2>
</div>
<div id="contentarea"><div class="cell markdown-cell"><h2 id="rethinkdb">RethinkDB</h2>
<p>RethinkDB 是一個文件導向的資料庫軟體,每一筆資料皆是一個 JSON 文件。</p>
<p>一個伺服器下面會管理許多資料庫(<code>Database</code>),一個資料庫下面有許多資料表(<code>table</code>),資料表下面就會有許多文件(<code>Document</code>)。</p>
<p>這裡就不講解安裝與執行了。</p>
</div><div class="cell markdown-cell"><h3 id="-secondary-index-">次要索引(Secondary Index)</h3>
<p>除了主要索引之外,RethinkDB 還支援次要索引,分為以下幾種</p>
<ul>
<li>簡單 - 單一欄位</li><li>複合 - 將多個欄位合成一個值(但是欄位可以分開要求值的範圍,下面會詳述)</li><li>多重 - 索引欄位的陣列值</li><li>空間 - 用來索引空間資料</li><li>任意 - 用函數來變換資料成為索引值</li></ul>
<p>下面會詳述使用方法。</p>
<p>假設有一個文件</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_variable">"author"</span>: <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> first_name: <span class="ace_string">"Peng Jun"</span>,
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> last_name: <span class="ace_string">"Hsu"</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_paren ace_rparen">}</span>,
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_variable">"contents"</span>: <span class="ace_string">"..."</span>,
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_variable">"tags"</span>: <span class="ace_paren ace_lparen">[</span><span class="ace_string">"simple"</span>, <span class="ace_string">"javascript"</span><span class="ace_paren ace_rparen">]</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">}</span>
</div></div></div></div><div class="cell markdown-cell"><p>我們可以利用複合索引來處理 <code>"author"</code> 欄位,複合底下的 <code>"first_name"</code> 以及 <code>"last_name"</code> 成為 <code>"author_name"</code>,之後在搜尋時,就可以查詢:<code>"first_name"</code> 是 <code>"Peng Jun"</code> 或是 <code>"Shane"</code> 而且 <code>"last_name"</code> 是 <code>"Hsu"</code> 或是 <code>"Chiang</code>" 的文件。</p>
<p>若是不需要這樣的搜尋分方法,也可以利用任意索引,將兩者直接相連成為 <code>"author_name"</code>,不過這樣就只能索引人的全名。</p>
<p>我們可以利用多重所引來索引陣列 <code>"tags"</code>,之後搜尋時就可以搜尋:<code>"tag"</code> 有 <code>"simple"</code> 的文件。</p>
</div><div class="cell markdown-cell"><h2 id="-node-repl-">使用 Node REPL 操作資料</h2>
<p>我們先使用 RethinkDB 的 ReQL 以及 <code>rethinkdb</code> 套件來測試。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">r</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_identifier">require</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'rethinkdb'</span><span class="ace_paren ace_rparen">)</span>
</div></div></div></div><div class="cell markdown-cell"><p>使用 <code>r</code> 來建立指令,之後再傳送到伺服器上(送到 <code>Socket</code>),最後再由 Promise 回傳資訊。</p>
</div><div class="cell markdown-cell"><h2 id="-">建立連線</h2>
<p>使用之前,一定要先建立一個可用的連線</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">connect</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'localhost:28015'</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">connect</span><span class="ace_paren ace_lparen">({</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">缺</span><span class="ace_cjk" style="width:20px">少</span><span class="ace_cjk" style="width:20px">任</span><span class="ace_cjk" style="width:20px">何</span><span class="ace_cjk" style="width:20px">值</span><span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">該</span><span class="ace_cjk" style="width:20px">值</span><span class="ace_cjk" style="width:20px">將</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">使</span><span class="ace_cjk" style="width:20px">用</span><span class="ace_cjk" style="width:20px">預</span><span class="ace_cjk" style="width:20px">設</span><span class="ace_cjk" style="width:20px">值</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">host</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_string">'localhost'</span><span class="ace_punctuation ace_operator">,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">port</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_string">'28015'</span><span class="ace_punctuation ace_operator">,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">db</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_string">'test'</span><span class="ace_punctuation ace_operator">,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">timeout</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_numeric">20</span><span class="ace_punctuation ace_operator">,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">authKey</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_string">''</span><span class="ace_punctuation ace_operator">,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">ssl</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">ca</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_identifier">caCert</span> <span class="ace_comment">// Buffer Object</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_paren ace_rparen">}</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><p>兩個方法都會回傳 <code>Promise</code>。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">var</span> <span class="ace_identifier">connection</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_constant ace_language">null</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">connect</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">established_connection</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_identifier">connection</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_identifier">established_connection</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_storage ace_type">console</span><span class="ace_punctuation ace_operator">.</span><span class="ace_support ace_function ace_firebug">error</span><span class="ace_paren ace_rparen">)</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">關閉連線</h2>
<p>使用之後,「理論上」應該要關閉連線。</p>
<p>手動關閉連線可以確保未獲得回應的要求順利完成(<code>noreplyWait</code> 選項)。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">這</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">方</span><span class="ace_cjk" style="width:20px">法</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">等</span><span class="ace_cjk" style="width:20px">待</span><span class="ace_cjk" style="width:20px">已</span><span class="ace_cjk" style="width:20px">經</span><span class="ace_cjk" style="width:20px">送</span><span class="ace_cjk" style="width:20px">出</span><span class="ace_cjk" style="width:20px">但</span><span class="ace_cjk" style="width:20px">還</span><span class="ace_cjk" style="width:20px">未</span><span class="ace_cjk" style="width:20px">收</span><span class="ace_cjk" style="width:20px">到</span><span class="ace_cjk" style="width:20px">回</span><span class="ace_cjk" style="width:20px">應</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">要</span><span class="ace_cjk" style="width:20px">求</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_support ace_function ace_dom">close</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">((</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">成</span><span class="ace_cjk" style="width:20px">功</span><span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">束</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">過</span><span class="ace_cjk" style="width:20px">程</span><span class="ace_cjk" style="width:20px">產</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">這</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">嘗</span><span class="ace_cjk" style="width:20px">試</span><span class="ace_cjk" style="width:20px">立</span><span class="ace_cjk" style="width:20px">即</span><span class="ace_cjk" style="width:20px">關</span><span class="ace_cjk" style="width:20px">閉</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">option</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">noreplyWait</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_language ace_boolean">true</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">}</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_support ace_function ace_dom">close</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">option</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">((</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">重新連線</h2>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">這</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">方</span><span class="ace_cjk" style="width:20px">法</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">等</span><span class="ace_cjk" style="width:20px">待</span><span class="ace_cjk" style="width:20px">已</span><span class="ace_cjk" style="width:20px">經</span><span class="ace_cjk" style="width:20px">送</span><span class="ace_cjk" style="width:20px">出</span><span class="ace_cjk" style="width:20px">但</span><span class="ace_cjk" style="width:20px">還</span><span class="ace_cjk" style="width:20px">未</span><span class="ace_cjk" style="width:20px">收</span><span class="ace_cjk" style="width:20px">到</span><span class="ace_cjk" style="width:20px">回</span><span class="ace_cjk" style="width:20px">應</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">要</span><span class="ace_cjk" style="width:20px">求</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">reconnect</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">重</span><span class="ace_cjk" style="width:20px">新</span><span class="ace_cjk" style="width:20px">連</span><span class="ace_cjk" style="width:20px">線</span><span class="ace_cjk" style="width:20px">成</span><span class="ace_cjk" style="width:20px">功</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">過</span><span class="ace_cjk" style="width:20px">程</span><span class="ace_cjk" style="width:20px">產</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">這</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">嘗</span><span class="ace_cjk" style="width:20px">試</span><span class="ace_cjk" style="width:20px">立</span><span class="ace_cjk" style="width:20px">即</span><span class="ace_cjk" style="width:20px">關</span><span class="ace_cjk" style="width:20px">閉</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">option</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">noreplyWait</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_language ace_boolean">true</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">}</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">reconnect</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">option</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">在連線上選擇資料庫</h2>
<p>若在要求中沒有選擇資料庫,將會使用連線預設的。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connecition</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">use</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'todo'</span><span class="ace_paren ace_rparen">)</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">執行查詢</h2>
<p>若已經透過 <code>r</code> 建立一個查詢(<code>query</code>),你可以透過連線執行它。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">query</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">選</span><span class="ace_cjk" style="width:20px">項</span><span class="ace_cjk" style="width:20px">(</span><span class="ace_cjk" style="width:20px">可</span><span class="ace_cjk" style="width:20px">以</span><span class="ace_cjk" style="width:20px">省</span><span class="ace_cjk" style="width:20px">略</span><span class="ace_cjk" style="width:20px">)</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">result</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// result <span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">型</span><span class="ace_cjk" style="width:20px">態</span><span class="ace_cjk" style="width:20px">與</span> query <span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">種</span><span class="ace_cjk" style="width:20px">類</span><span class="ace_cjk" style="width:20px">有</span><span class="ace_cjk" style="width:20px">關</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">例</span><span class="ace_cjk" style="width:20px">外</span><span class="ace_cjk" style="width:20px">處</span><span class="ace_cjk" style="width:20px">理</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><p>RethinkDB 提供的選項有</p>
<ul>
<li><code>readMode</code> - 當在叢集中的讀取方式<ul>
<li><code>single</code>(預設值)- 從主伺服器(Primary replica)中讀取在記憶體中的內容(不一定被寫入硬碟)</li><li><code>majority</code> - 從多個伺服器中,確認寫入硬碟中的資料大部分為哪寫(可能有部分伺服器尚未更新),並讀取</li><li><code>outdated</code> - 從一個伺服器中讀取在記憶體中的內容(最快、最不準確)</li></ul>
</li><li><p><code>timeFormat</code> - 時間的格式</p>
<ul>
<li><code>native</code> (預設值) - 將會回傳成 <code>Date</code> 物件</li><li><p><code>raw</code> - 回傳 JSON 表示式</p>
<pre><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>{
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> '$reql_type$': 'TIME',
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> epoch_time: 1458120984.138,
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> timezone: '+00:00'
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>}
</div></div></div></pre></li></ul>
</li><li><p><code>profile</code> - 是否回傳查詢的效能資訊,預設值為 <code>false</code></p>
<pre><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>{
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> profile: [
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> {
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_indent-guide"> </span> description: 'Evaluating table.',
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_indent-guide"> </span> 'duration(ms)': 0.019464,
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_indent-guide"> </span> sub_tasks: [Object]
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> },
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> {
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_indent-guide"> </span> description: 'Perform read.',
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_indent-guide"> </span> 'duration(ms)': 1.53457,
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_indent-guide"> </span> sub_tasks: [Object]
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> }
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> ],
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> value: Cursor {...}
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>}
</div></div></div></pre></li><li><code>durability</code><ul>
<li><code>hard</code> - 伺服器收到資料之後必須寫入,才會向客戶端送出回應</li><li><code>soft</code> - 伺服器收到資料之後就會向客戶端送出回應</li></ul>
</li><li><code>groupFormat</code> - <code>grouped_data</code> 以及 <code>grouped_stream</code> 的格式<ul>
<li><code>native</code></li><li><code>raw</code></li></ul>
</li><li><code>noreply</code> - 是否要回傳資料(若設為 <code>false</code>,就不需要處理常式) </li><li><code>db</code> - 要查詢的資料庫(可以代替 <code>r.db</code> 或是 <code>conn.use</code>)</li><li><code>arrayLimit</code> - 回傳的陣列大小上限。(預設值:<code>100,000</code>/註記:陣列寫入上限永遠是 <code>100,000</code>)</li><li><code>binaryFormat</code> - 回傳二進位資料的方法<ul>
<li><code>native</code> - 回傳二進位資料</li><li><code>raw</code> - 回傳存在資料庫中的 JSON 值(不進行轉換,跟 <code>timeFormat</code> 類似)</li></ul>
</li><li><code>minBatchRows</code></li><li><code>maxBatchRows</code></li><li><code>maxBatchBytes</code></li><li><code>maxBatchSeconds</code></li><li><code>firstBatchScaleDownFactor</code></li></ul>
</div><div class="cell markdown-cell"><h2 id="-">觀察變化</h2>
<p>RethinkDB 提供連續觀察變化的 API,可以持續追蹤一個查詢的變化。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">query</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">changes</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">cursor</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_identifier">cursor</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">each</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">change</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">對</span> change <span class="ace_cjk" style="width:20px">做</span><span class="ace_cjk" style="width:20px">事</span><span class="ace_cjk" style="width:20px">情</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">這</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">才</span><span class="ace_cjk" style="width:20px">是</span><span class="ace_cjk" style="width:20px">真</span><span class="ace_cjk" style="width:20px">正</span><span class="ace_cjk" style="width:20px">的</span> callback <span class="ace_cjk" style="width:20px">函</span><span class="ace_cjk" style="width:20px">數</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">要</span><span class="ace_cjk" style="width:20px">停</span><span class="ace_cjk" style="width:20px">止</span><span class="ace_cjk" style="width:20px">觀</span><span class="ace_cjk" style="width:20px">察</span><span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">直</span><span class="ace_cjk" style="width:20px">接</span> cursor.close() <span class="ace_cjk" style="width:20px">即</span><span class="ace_cjk" style="width:20px">可</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><p><code>changes()</code> 也提供幾個選項,可以當作設定物件傳入 <code>changes()</code> 中。</p>
</div><div class="cell markdown-cell"><ul>
<li><code>squash</code> - 設定若有一筆資料有多個變化,將會如何被送達<ul>
<li><code>true</code> - 多個變化會被合併成一個,使用戶端可以直接更新到最新資料</li><li><code>false</code>(預設值)- 多個變化不會被合併</li><li><code>n</code> - <code>n</code> 秒內的變化會被合併</li></ul>
</li><li><code>changefeedQueueSize</code> - 伺服器願意暫存的變化數量(預設值:<code>100,000</code>)</li><li><code>includeInitial</code> - 是否傳送初始資料</li><li><code>includeStates</code> - 是否在變化中包含 <code>state</code> 值(預設值:<code>false</code>)<ul>
<li><code>state</code> 包含 <code>initializing</code> 以及 <code>ready</code></li></ul>
</li></ul>
</div><div class="cell markdown-cell"><h2 id="-">等待不被等待的查詢</h2>
<p>若在查詢的時候將 <code>noreplyWait</code> 設為 <code>true</code>,但是必須在特定的時間等查詢完成,可以利用這個函數</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">noreplyWait</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">((</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">所</span><span class="ace_cjk" style="width:20px">以</span><span class="ace_cjk" style="width:20px">查</span><span class="ace_cjk" style="width:20px">詢</span><span class="ace_cjk" style="width:20px">都</span><span class="ace_cjk" style="width:20px">已</span><span class="ace_cjk" style="width:20px">經</span><span class="ace_cjk" style="width:20px">完</span><span class="ace_cjk" style="width:20px">成</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">伺服器</h2>
<p>可以透過連線物件取得伺服器的 <code>UUID</code> 以及名稱。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">server</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">server</span> <span class="ace_keyword ace_operator">=></span><span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">伺</span><span class="ace_cjk" style="width:20px">服</span><span class="ace_cjk" style="width:20px">器</span><span class="ace_cjk" style="width:20px">是</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">物</span><span class="ace_cjk" style="width:20px">件</span><span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">其</span><span class="ace_cjk" style="width:20px">中</span><span class="ace_cjk" style="width:20px">有</span> id <span class="ace_cjk" style="width:20px">以</span><span class="ace_cjk" style="width:20px">及</span> name <span class="ace_cjk" style="width:20px">值</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">連線的事件</h2>
<p>連線物件本身會發出幾個事件</p>
<ul>
<li>connect</li><li>close</li><li>timeout</li><li>error</li></ul>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">event</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'connect'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">addListener</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">處</span><span class="ace_cjk" style="width:20px">理</span><span class="ace_cjk" style="width:20px">連</span><span class="ace_cjk" style="width:20px">線</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">on</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">once</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">once</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_identifier">listener</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">removeAllListeners</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">setMaxListeners</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">n</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">listeners</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">connection</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">emit</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">event</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_identifier">args</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_punctuation ace_operator">...</span><span class="ace_paren ace_rparen">)</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">游標物件</h2>
<p>從資料庫載入的資料以游標表示(而不是一個肥大的陣列)</p>
</div><div class="cell markdown-cell"><h3 id="-">游標的尋訪</h3>
<p>可以透過 <code>cursor.next</code>, <code>cursor.each</code>, <code>cursor.eachAsync</code> 或是 <code>cursor.toArray</code> 來尋訪游標所指向的資料。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">cursor</span><span class="ace_punctuation ace_operator">.</span><span class="ace_support ace_constant">next</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">data</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">下</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">筆</span><span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">cursor</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">each</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">data</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">下</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">筆</span><span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">}</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">全</span><span class="ace_cjk" style="width:20px">部</span><span class="ace_cjk" style="width:20px">載</span><span class="ace_cjk" style="width:20px">入</span><span class="ace_cjk" style="width:20px">完</span><span class="ace_cjk" style="width:20px">成</span><span class="ace_cjk" style="width:20px">後</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">動</span><span class="ace_cjk" style="width:20px">作</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">cursor</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">eachAsync</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">data</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">下</span><span class="ace_cjk" style="width:20px">一</span><span class="ace_cjk" style="width:20px">筆</span><span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">((</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">全</span><span class="ace_cjk" style="width:20px">部</span><span class="ace_cjk" style="width:20px">載</span><span class="ace_cjk" style="width:20px">入</span><span class="ace_cjk" style="width:20px">完</span><span class="ace_cjk" style="width:20px">成</span><span class="ace_cjk" style="width:20px">後</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">動</span><span class="ace_cjk" style="width:20px">作</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=</span><span class="ace_paren ace_rparen">)</span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">cursor</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">toArray</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">array</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">載</span><span class="ace_cjk" style="width:20px">入</span><span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span><span class="ace_cjk" style="width:20px">後</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">陣</span><span class="ace_cjk" style="width:20px">列</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h3 id="-">關閉</h3>
<p>若 <code>cursor</code> 還未完成讀取就被放棄,應該要 <code>cursor.close()</code></p>
</div><div class="cell markdown-cell"><h3 id="-">指標事件</h3>
<p>指標事件的方法與連線的事件相同,指標會發出以下事件</p>
<ul>
<li><code>data</code></li><li><code>error</code></li></ul>
</div><div class="cell markdown-cell"><h2 id="-">資料庫</h2>
<p>RethinkDB 提供新增、刪除、列出資料庫的 API。</p>
</div><div class="cell markdown-cell"><h3 id="-">列出資料庫</h3>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">dbList</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">db_names</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span><span class="ace_cjk" style="width:20px">庫</span><span class="ace_cjk" style="width:20px">名</span><span class="ace_cjk" style="width:20px">稱</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">陣</span><span class="ace_cjk" style="width:20px">列</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h3 id="-">新增資料庫</h3>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">database_name</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'chat'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span><span class="ace_cjk" style="width:20px">庫</span><span class="ace_cjk" style="width:20px">已</span><span class="ace_cjk" style="width:20px">經</span><span class="ace_cjk" style="width:20px">存</span><span class="ace_cjk" style="width:20px">在</span><span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">有</span> Runtime Error<span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">請</span><span class="ace_cjk" style="width:20px">記</span><span class="ace_cjk" style="width:20px">得</span><span class="ace_cjk" style="width:20px">處</span><span class="ace_cjk" style="width:20px">理</span><span class="ace_cjk" style="width:20px">。</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">dbCreate</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">database_name</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">result</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_storage ace_type">const</span> <span class="ace_identifier">database_id</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_identifier">result</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">id</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">也</span><span class="ace_cjk" style="width:20px">有</span> result.name</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h3 id="-">刪除資料庫</h3>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">database_name</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'chat'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">dbDrop</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">database_name</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">result</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">果</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">/*</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * result <span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">構</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "config_changes": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "old_val": {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "id": "e4689cfc-e903-4532-a0e6-2d6797a43f07",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "name": "superheroes"</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * },</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "new_val": null</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * ],</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "tables_dropped": 3,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "dbs_dropped": 1</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * }</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">資料表</h2>
<p>透過 <code>r.db(database_name)</code> 取得資料庫之後,可以進行資料表操作。</p>
</div><div class="cell markdown-cell"><h3 id="-">列出資料表</h3>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">database</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'chat'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">db</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">database</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">tableList</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">tables</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">料</span><span class="ace_cjk" style="width:20px">表</span><span class="ace_cjk" style="width:20px">名</span><span class="ace_cjk" style="width:20px">稱</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">陣</span><span class="ace_cjk" style="width:20px">列</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h3 id="-">新增資料表</h3>
<p>有以下選項</p>
<ul>
<li><code>primaryKey</code>(預設值:<code>id</code>)- 索引值的欄位名稱。</li><li><code>durability</code>(預設值:<code>hard</code>)- 可以是 <code>soft</code> 或是 <code>hard</code></li><li><code>shards</code>、<code>replicas</code> 以及 <code>primaryReplicaTag</code> - 與叢集有關</li></ul>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">database</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'chat'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">table</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'apple'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">db</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">database</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">tableCreate</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">table</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">result</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">果</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">/*</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * result <span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">構</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "config_changes": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "new_val": {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "db": "test",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "durability": "hard",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "id": "20ea60d4-3b76-4817-8828-98a236df0297",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "name": "apple",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "primary_key": "id",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "shards": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "primary_replica": "rethinkdb_srv1",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "replicas": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "rethinkdb_srv1",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "rethinkdb_srv2"</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * ]</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * ],</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "write_acks": "majority"</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * },</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "old_val": null</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * ],</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * "tables_created": 1</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment"> * }</span>
</div></div></div></div><div class="cell markdown-cell"><h3 id="-">刪除資料表</h3>
<p>刪除沒有可用的選項。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">database</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'chat'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">table</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_string">'apple'</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">db</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">database</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">tableDrop</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">table</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">result</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">果</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// result <span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">構</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "config_changes": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "old_val": {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "db": "test",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "durability": "hard",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "id": "20ea60d4-3b76-4817-8828-98a236df0297",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "name": "dc_universe",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "primary_key": "id",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "shards": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "primary_replica": "rethinkdb_srv1",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "replicas": [</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "rethinkdb_srv1",</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "rethinkdb_srv2"</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// ]</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// ],</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "write_acks": "majority"</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// },</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "new_val": null</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// ],</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// "tables_dropped": 1</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div></div></div></div><div class="cell markdown-cell"><h3 id="-secondary-index-">次要索引(Secondary Index)</h3>
<p>註記:前面有新增有關次要索引的說明。</p>
<p>有關次要索引的函數有 6 個。</p>
</div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexList</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// indexFunction <span class="ace_cjk" style="width:20px">在</span><span class="ace_cjk" style="width:20px">任</span><span class="ace_cjk" style="width:20px">意</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span><span class="ace_cjk" style="width:20px">或</span><span class="ace_cjk" style="width:20px">是</span><span class="ace_cjk" style="width:20px">複</span><span class="ace_cjk" style="width:20px">合</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span><span class="ace_cjk" style="width:20px">才</span><span class="ace_cjk" style="width:20px">需</span><span class="ace_cjk" style="width:20px">要</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexCreate</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">indexName</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_identifier">indexFunction</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">{</span><span class="ace_identifier">multi</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_language ace_boolean">false</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_identifier">geo</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_language ace_boolean">false</span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexDrop</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">indexName</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// overwrite <span class="ace_cjk" style="width:20px">選</span><span class="ace_cjk" style="width:20px">項</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">覆</span><span class="ace_cjk" style="width:20px">寫</span><span class="ace_cjk" style="width:20px">掉</span><span class="ace_cjk" style="width:20px">原</span><span class="ace_cjk" style="width:20px">本</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexRename</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">oldIndexName</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_identifier">newIndexName</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">{</span><span class="ace_identifier">overwrite</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_language ace_boolean">false</span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">以</span><span class="ace_cjk" style="width:20px">下</span><span class="ace_cjk" style="width:20px">兩</span><span class="ace_cjk" style="width:20px">個</span><span class="ace_cjk" style="width:20px">若</span><span class="ace_cjk" style="width:20px">沒</span><span class="ace_cjk" style="width:20px">有</span><span class="ace_cjk" style="width:20px">傳</span><span class="ace_cjk" style="width:20px">入</span> index<span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">則</span><span class="ace_cjk" style="width:20px">會</span><span class="ace_cjk" style="width:20px">回</span><span class="ace_cjk" style="width:20px">傳</span><span class="ace_cjk" style="width:20px">、</span><span class="ace_cjk" style="width:20px">等</span><span class="ace_cjk" style="width:20px">待</span><span class="ace_cjk" style="width:20px">所</span><span class="ace_cjk" style="width:20px">有</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexStatus</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">index</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">回</span><span class="ace_cjk" style="width:20px">傳</span><span class="ace_cjk" style="width:20px">陣</span><span class="ace_cjk" style="width:20px">列</span><span class="ace_cjk" style="width:20px">的</span> result <span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">構</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// index: <indexName>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// ready: true,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// function: <binary>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// multi: <bool>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// geo: <bool>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// outdated: <bool></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">或</span><span class="ace_cjk" style="width:20px">是</span><span class="ace_cjk" style="width:20px">還</span><span class="ace_cjk" style="width:20px">在</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span><span class="ace_cjk" style="width:20px">中</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// index: <indexName>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// ready: false,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// progress: <float>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// function: <binary>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// multi: <bool>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// geo: <bool>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// outdated: <bool></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexWait</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">index</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">回</span><span class="ace_cjk" style="width:20px">傳</span><span class="ace_cjk" style="width:20px">陣</span><span class="ace_cjk" style="width:20px">列</span><span class="ace_cjk" style="width:20px">的</span> result <span class="ace_cjk" style="width:20px">結</span><span class="ace_cjk" style="width:20px">構</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// index: <indexName>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// ready: true,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// function: <binary>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// multi: <bool>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// geo: <bool>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// outdated: <bool></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div></div></div></div><div class="cell code-cell"><div class="ace-xcode"><div class="ace_static_highlight ace_show_gutter" style="counter-reset:ace_line 0"><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_storage ace_type">const</span> <span class="ace_identifier">table</span> <span class="ace_keyword ace_operator">=</span> <span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">db</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'chat'</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">table</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'apple'</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">假</span><span class="ace_cjk" style="width:20px">設</span><span class="ace_cjk" style="width:20px">文</span><span class="ace_cjk" style="width:20px">件</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">格</span><span class="ace_cjk" style="width:20px">式</span><span class="ace_cjk" style="width:20px">如</span><span class="ace_cjk" style="width:20px">下</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// posted: <span class="ace_cjk" style="width:20px">日</span><span class="ace_cjk" style="width:20px">期</span>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// message: <span class="ace_cjk" style="width:20px">字</span><span class="ace_cjk" style="width:20px">串</span>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// author: {</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// age: <span class="ace_cjk" style="width:20px">數</span><span class="ace_cjk" style="width:20px">字</span>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// first_name: <span class="ace_cjk" style="width:20px">字</span><span class="ace_cjk" style="width:20px">串</span>,</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// last_name: <span class="ace_cjk" style="width:20px">字</span><span class="ace_cjk" style="width:20px">串</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// }</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">因</span><span class="ace_cjk" style="width:20px">為</span><span class="ace_cjk" style="width:20px">聊</span><span class="ace_cjk" style="width:20px">天</span><span class="ace_cjk" style="width:20px">室</span><span class="ace_cjk" style="width:20px">需</span><span class="ace_cjk" style="width:20px">要</span><span class="ace_cjk" style="width:20px">用</span><span class="ace_cjk" style="width:20px">日</span><span class="ace_cjk" style="width:20px">期</span><span class="ace_cjk" style="width:20px">來</span><span class="ace_cjk" style="width:20px">排</span><span class="ace_cjk" style="width:20px">列</span><span class="ace_cjk" style="width:20px">資</span><span class="ace_cjk" style="width:20px">訊</span><span class="ace_cjk" style="width:20px">,</span><span class="ace_cjk" style="width:20px">在</span><span class="ace_cjk" style="width:20px">日</span><span class="ace_cjk" style="width:20px">期</span><span class="ace_cjk" style="width:20px">上</span><span class="ace_cjk" style="width:20px">建</span><span class="ace_cjk" style="width:20px">立</span><span class="ace_cjk" style="width:20px">簡</span><span class="ace_cjk" style="width:20px">單</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexCreate</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'posted'</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">run</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">connection</span><span class="ace_paren ace_rparen">)</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">在</span><span class="ace_cjk" style="width:20px">作</span><span class="ace_cjk" style="width:20px">者</span><span class="ace_cjk" style="width:20px">姓</span><span class="ace_cjk" style="width:20px">名</span><span class="ace_cjk" style="width:20px">上</span><span class="ace_cjk" style="width:20px">面</span><span class="ace_cjk" style="width:20px">建</span><span class="ace_cjk" style="width:20px">立</span><span class="ace_cjk" style="width:20px">複</span><span class="ace_cjk" style="width:20px">合</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexCreate</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'author_name'</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">[</span><span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">row</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'author.first_name'</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_identifier">r</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">row</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'author.last_name'</span><span class="ace_paren ace_rparen">)])</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_comment">// <span class="ace_cjk" style="width:20px">在</span><span class="ace_cjk" style="width:20px">訊</span><span class="ace_cjk" style="width:20px">息</span><span class="ace_cjk" style="width:20px">上</span><span class="ace_cjk" style="width:20px">面</span><span class="ace_cjk" style="width:20px">建</span><span class="ace_cjk" style="width:20px">立</span><span class="ace_cjk" style="width:20px">多</span><span class="ace_cjk" style="width:20px">重</span><span class="ace_cjk" style="width:20px">、</span><span class="ace_cjk" style="width:20px">任</span><span class="ace_cjk" style="width:20px">意</span><span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexCreate</span><span class="ace_paren ace_lparen">(</span><span class="ace_string">'keywords'</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_storage ace_type">function</span><span class="ace_paren ace_lparen">(</span><span class="ace_variable ace_language">document</span><span class="ace_paren ace_rparen">)</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">回</span><span class="ace_cjk" style="width:20px">傳</span><span class="ace_cjk" style="width:20px">訊</span><span class="ace_cjk" style="width:20px">息</span><span class="ace_cjk" style="width:20px">中</span><span class="ace_cjk" style="width:20px">的</span><span class="ace_cjk" style="width:20px">關</span><span class="ace_cjk" style="width:20px">鍵</span><span class="ace_cjk" style="width:20px">字</span><span class="ace_cjk" style="width:20px">陣</span><span class="ace_cjk" style="width:20px">列</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">}</span><span class="ace_punctuation ace_operator">,</span> <span class="ace_paren ace_lparen">{</span><span class="ace_identifier">multi</span><span class="ace_punctuation ace_operator">:</span> <span class="ace_constant ace_language ace_boolean">true</span><span class="ace_paren ace_rparen">})</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_identifier">table</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">indexWait</span><span class="ace_paren ace_lparen">(</span><span class="ace_paren ace_rparen">)</span><span class="ace_punctuation ace_operator">.</span><span class="ace_identifier">then</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">result</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">索</span><span class="ace_cjk" style="width:20px">引</span><span class="ace_cjk" style="width:20px">完</span><span class="ace_cjk" style="width:20px">成</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span><span class="ace_punctuation ace_operator">.</span><span class="ace_keyword">catch</span><span class="ace_paren ace_lparen">(</span><span class="ace_identifier">error</span> <span class="ace_keyword ace_operator">=></span> <span class="ace_paren ace_lparen">{</span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span> <span class="ace_comment">// <span class="ace_cjk" style="width:20px">發</span><span class="ace_cjk" style="width:20px">生</span><span class="ace_cjk" style="width:20px">錯</span><span class="ace_cjk" style="width:20px">誤</span></span>
</div><div class="ace_line"><span class="ace_gutter ace_gutter-cell" unselectable="on"></span><span class="ace_paren ace_rparen">})</span>
</div></div></div></div><div class="cell markdown-cell"><h2 id="-">文件</h2>
<h3 id="-">新增文件</h3>
</div><div class="cell markdown-cell"></div></div>
<script>document.body.onkeyup = function(e) {
if (e.keyCode === 39) window.location.href = 'RethinkDB 範例程式.html';
if (e.keyCode === 37) window.location.href = 'WebSocket 範例程式.html';
}</script>
</body>
</html>