35
EWD 3 トトトトトト トトト #23 Global トトトトトト JavaScript トトトトト (d) トトトトトトトトトトト M/Gateway Developments Ltd. Rob Tweed ト : トトトトトトトトトトトトト ト トト GT.M トトト : トト ト ※ トトトトトトトト Cache’ トトトトトトト

EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

Embed Size (px)

Citation preview

Page 1: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

EWD 3トレーニング・コース  #23

Global ストレージの JavaScript 用の抽

象化 (d) ノードの範囲を渡り歩くM/Gateway Developments Ltd.

Rob Tweed訳 : 日本ダイナシステム株式会社 嶋 芳成

GT.M 版編集 : 澤田 潔

※ 本稿オリジナルは Cache’ 向けとして編纂

Page 2: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

2

特定の節 ( ノード ) について繰り返しを制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

2016/9/18 EWD 3 トレーニング・コース #23

Page 3: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

3

特定の節 ( ノード ) について繰り返しを制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

• Br で始まる名前のみを得ます• Briggs• Bryant

• そしてその名前の各インスタンスのデータ・レコードを取得する

2016/9/18 EWD 3 トレーニング・コース #23

Page 4: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

4

特定の節 ( ノード ) について繰り返しを制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

forEachChild({prefix: 'Br'}, function{...});

• ここでも制御オブジェクト引数を用います• ここでは前方一致でループを

制限します

2016/9/18 EWD 3 トレーニング・コース #23

Page 5: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

5

特定の節 ( ノード ) について繰り返しを制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode){ // Br ではじまる名前の、その下位節に制限してループする});

2016/9/18 EWD 3 トレーニング・コース #23

Page 6: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

6

特定の節 ( ノード ) について繰り返しを制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode){ childNode.forEachChild(function(id){ // Br ではじまる名前の、各 id を取得する });});

2016/9/18 EWD 3 トレーニング・コース #23

Page 7: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

7

特定の節 ( ノード ) について繰り返しを制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode){ childNode.forEachChild(function(id){ console.log(id); });});

2016/9/18 EWD 3 トレーニング・コース #23

210 386 23 5321

Page 8: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

8

Customer ドキュメントに対する索引

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

customer(id, プロパティ ) = 値

2016/9/18 EWD 3 トレーニング・コース #23

Page 9: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

9

Customer ドキュメントに対する索引

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

customer(id, プロパティ ) = 値

2016/9/18 EWD 3 トレーニング・コース #23

Page 10: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

10

Customer ドキュメントに対する索引

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

customer(id, プロパティ ) = 値

customer = { '386': { firstName: 'John', lastName: 'Briggs', address: '123 Acacia Drive', // ... など }, // ... など}

2016/9/18 EWD 3 トレーニング・コース #23

Page 11: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

11

Customer ドキュメントに対する索引

customer(id, プロパティ ) = 値

customer = { '386': { firstName: 'John', lastName: 'Briggs', address: '123 Acacia Drive', // ... など }, // ... など}

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

Page 12: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

12

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

customer というドキュメントを Global ストレージの中で表現すると上記のようになります

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

Page 13: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

13

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 14: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

14

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 15: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

15

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 16: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

16

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 17: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

17

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 18: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

18

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 19: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

19

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 20: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

20

Customer ドキュメントに対する索引

customer(386,"firstName") ="John"customer(386,"lastName")="Briggs"customer(386,"address")="123 Acacia Drive"

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var customer new this.documentStore.DocumentNode('customer');

index.forEachChild({prefix: 'Br'}, function(nodeName, childNode) { childNode.forEachChild(function(id) { // id を用いて、メインのデータ・レコードを指し示します var address =customer.$(id).$('address').value; // ... など });});

Page 21: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

21

同じ文字列で始まる索引を逆順に繰り返す

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

Page 22: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

22

同じ文字列で始まる索引を逆順に繰り返す

2016/9/18 EWD 3 トレーニング・コース #23

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var params = {prefix: 'Br', direction: 'reverse'};index.forEachChild(params, function(nodeName, childNode) { childNode.forEachChild(function(id) { console.log(id) });});

Page 23: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

23

同じ文字列で始まる索引を逆順に繰り返す

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

制御オブジェクトを使うことで、先頭の文字列と検索順序を組み合わせて設定することができます

2016/9/18 EWD 3 トレーニング・コース #23

var index = new this.documentStore.DocumentNode('myIndex');var params = {prefix: 'Br', direction: 'reverse'};index.forEachChild(params, function(nodeName, childNode) { childNode.forEachChild(function(id) { console.log(id) });});

Page 24: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

24

同じ文字列で始まる索引を逆順に繰り返す

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

制御オブジェクトを使うことで、先頭の文字列と検索順序を組み合わせて設定することができます

2016/9/18 EWD 3 トレーニング・コース #23

var index = new this.documentStore.DocumentNode('myIndex');var params = {prefix: 'Br', direction: 'reverse'};index.forEachChild(params, function(nodeName, childNode) { childNode.forEachChild(function(id) { console.log(id) });}); 23

5321 210 386

Page 25: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

25

同じ文字列で始まる索引を逆順に繰り返す

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

制御オブジェクトを使うことで、先頭の文字列と検索順序を組み合わせて設定することができます

2016/9/18 EWD 3 トレーニング・コース #23

var index = new this.documentStore.DocumentNode('myIndex');var params = {prefix: 'Br', direction: 'reverse'};index.forEachChild(params, function(nodeName, childNode) { childNode.forEachChild(function(id) { console.log(id) });}); 23

5321 210 386

内側のループは昇順です

Page 26: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

26

同じ文字列で始まる索引を逆順に繰り返す

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

内側のループについても逆順にするために制御オブジェクトを用います

2016/9/18 EWD 3 トレーニング・コース #23

var index = new this.documentStore.DocumentNode('myIndex');var params = {prefix: 'Br', direction: 'reverse'};index.forEachChild(params, function(nodeName, childNode) { childNode.forEachChild({direction: 'reverse'}, function(id) { console.log(id) });});

Page 27: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

27

同じ文字列で始まる索引を逆順に繰り返す

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

内側のループについても逆順にするために制御オブジェクトを用います

2016/9/18 EWD 3 トレーニング・コース #23

var index = new this.documentStore.DocumentNode('myIndex');var params = {prefix: 'Br', direction: 'reverse'};index.forEachChild(params, function(nodeName, childNode) { childNode.forEachChild({direction: 'reverse'}, function(id) { console.log(id) });}); 5321

23 386 210

これで出力は完全に逆順になりました

Page 28: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

28

繰り返しの範囲を制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

添え字 1 から

添え字 2 まで

例えば、 Briggs から Davis まで

2016/9/18 EWD 3 トレーニング・コース #23

Page 29: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

29

繰り返しの範囲を制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

添え字 1 から

添え字 2 まで

例えば、 Briggs から Davis まで

forEachChild({ range: { from: 'Briggs', to: 'Davis' }}, function{...})

2016/9/18 EWD 3 トレーニング・コース #23

Page 30: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

30

繰り返しの範囲を制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

もっとありそうな制限方法

forEachChild({ range: { from: 'Br', to: 'Da' }}, function{...})

2016/9/18 EWD 3 トレーニング・コース #23

from と to で、返す節 ( ノード ) の始まる文字列を定義します

Page 31: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

31

繰り返しの範囲を制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

あるいは

forEachChild({ range: { from: 'B', to: 'D' }}, function{...})

2016/9/18 EWD 3 トレーニング・コース #23

from と to で、返す節 ( ノード ) の始まる文字列を定義します

Page 32: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

32

繰り返しの範囲を制限する

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var params = { range: { from: 'Br', to: 'Da" }};index.forEachChild(params, function(name, childNode){ childNode.forEachChild(function(id){ console.log(id); });});

2016/9/18 EWD 3 トレーニング・コース #23

Page 33: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

33

繰り返しの範囲を制限して逆順にする?

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var params = { range: { from: 'Br', to: 'Da" }};index.forEachChild(params, function(name, childNode){ childNode.forEachChild(function(id){ console.log(id); });});

2016/9/18 EWD 3 トレーニング・コース #23

210 386 23 5321 641 714 13 8142 9112

Page 34: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

34

繰り返しの範囲を制限して逆順にする?

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

2016/9/18 EWD 3 トレーニング・コース #23

Page 35: EWD 3トレーニングコース#23 GlobalストレージのJavaScript用抽象化-(d) ノードの範囲を渡り歩く

35

繰り返しの範囲を制限して逆順にする?

myIndex("Andrews",103)=""myIndex("Barton",23)=""myIndex("Briggs",210)=""myIndex("Briggs",386)=""myIndex("Bryant",23)=""myIndex("Bryant",5321)=""myIndex("Davies",641)=""myIndex("Davies",714)=""myIndex("Davis",13)=""myIndex("Davis",8142)=""myIndex("Davis",9112)=""myIndex("Douglas",651)=""myIndex("Ennis",108)=""myIndex("Ennis",712)=""

var index = new this.documentStore.DocumentNode('myIndex');var params = { direction: 'reverse', range: { from: 'Br', to: 'Da" }};index.forEachChild(params, function(name, childNode){ childNode.forEachChild(function(id){ console.log(id); });});

制御オブジェクトには、範囲と逆順を組み合わせることができます

2016/9/18 EWD 3 トレーニング・コース #23