ewd 3トレーニングコース#25 globalストレージのjavascript用抽象化-(f)...
TRANSCRIPT
EWD 3トレーニング・コース #25
Global ストレージの JavaScript 用の抽象化
-(f) Document データベースのできること
M/Gateway Developments Ltd.Rob Tweed
訳 : 日本ダイナシステム株式会社 嶋 芳成
3
1 対 1 対応
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
2016/9/19 EWD 3 トレーニング・コース #25
Document データベースのメソッド• Documents データベースに対する DocumentNode
メソッド/ JSON マッピング
• getDocument()• setDocument()
2016/9/19 EWD 3 トレーニング・コース #25 4
DocumentNode オブジェクトのインスタンス化var doc = new this.documentStore.DocumentNode('myDoc');
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 5
getDocument()var doc = new this.documentStore.DocumentNode('myDoc');var myObj = doc.getDocument();
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 6
生成する
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
getDocument()var doc = new this.documentStore.DocumentNode('myDoc');var myObj = doc.getDocument();
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 7
生成する
myObj は、標準のメモリ内の JavaScript オブジェクトで、 DocumentNode の階層構造の、指定された節の下の部分木のデータのコピーを保持しています
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
setDocument()var myObj = { // 右に示すオブジェクトを生成する }
2016/9/19 EWD 3 トレーニング・コース #25 8
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
setDocument()var myObj = { // 右に示すオブジェクトを生成する }var doc = new this.documentStore.DocumentNode('myDoc');// これはまだディスク上には存在しない
2016/9/19 EWD 3 トレーニング・コース #25 9
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
setDocument()var myObj = { // 右に示すオブジェクトを生成する }var doc = new this.documentStore.DocumentNode('myDoc');doc.setDocument(myObj);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 10
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
生成する
setDocument()var myObj = { // 右に示すオブジェクトを生成する }var doc = new this.documentStore.DocumentNode('myDoc');doc.setDocument(myObj);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 11
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' }, d: { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' } }}
生成する
myDoc は、ディスク上に生成され、そこには myObj オブジェクトの保持するデータのコピーが格納されていますこれで、 Global ストレージの節 ( ノード ) と対応されました
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 12
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = dnode.getDocument()
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 13
myObj = { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = dnode.getDocument()
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 14
myObj = { e1: { f1a: 'bar1a', f2a: 'bar2a' } e2: { f1b: 'bar1b', f2b: 'bar2b', f3b: 'bar3b' }}
myObj は、 myDoc("d") の下位節 ( 下位ノード ) の部分木だけから生成されます
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 15
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 16
myObj = { g: 1000, h2: { w1: 'foo', w2: 'bar' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };dnode.setDocument(myObj);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"myDoc("d","g")=1000myDoc("d","h2","w1")="foo"myDoc("d","h2","w2")="bar"
2016/9/19 EWD 3 トレーニング・コース #25 17
myObj = { g: 1000, h2: { w1: 'foo', w2: 'bar' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };dnode.setDocument(myObj);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 18
?
myObj = { e2: { f3b: 'new value', f4b: 'bar4b' }, g: 1000, h2: { w1: 'foo', w2: 'bar' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };dnode.setDocument(myObj);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="new value"myDoc("d","e2","f4b")="bar4b"myDoc("d","g")=1000myDoc("d","h2","w1")="foo"myDoc("d","h2","w2")="bar"2016/9/19 EWD 3 トレーニング・コース #25 19
myObj = { e2: { f3b: 'new value', f4b: 'bar4b' }, g: 1000, h2: { w1: 'foo', w2: 'bar' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };dnode.delete();
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #25 20
myObj = { e2: { f3b: 'new value', f4b: 'bar4b' }, g: 1000, h2: { w1: 'foo', w2: 'bar' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };dnode.delete();
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"
2016/9/19 EWD 3 トレーニング・コース #25 21
myObj = { e2: { f3b: 'new value', f4b: 'bar4b' }, g: 1000, h2: { w1: 'foo', w2: 'bar' }}
任意の DocumentNode に適応できることこれらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);var myObj = { // 右に示したオブジェクトを生成します };dnode.delete();dnode.setDocument(myObj);
myDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e2","f3b")="new value"myDoc("d","e2","f4b")="bar4b"myDoc("d","g")=1000myDoc("d","h2","w1")="foo"myDoc("d","h2","w2")="bar"
2016/9/19 EWD 3 トレーニング・コース #25 22
myObj = { e2: { f3b: 'new value', f4b: 'bar4b' }, g: 1000, h2: { w1: 'foo', w2: 'bar' }}
配列のマッピング
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
Global ストレージ内での配列は、慣例に過ぎませんが、添字値として連続する整数を用います
2016/9/19 EWD 3 トレーニング・コース #25 24
配列のマッピング
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
Global ストレージ内での配列は、慣例に過ぎませんが、添字値として連続する整数を用います
旧来のアプリケーションでは、番号付けは通常 1 からです
2016/9/19 EWD 3 トレーニング・コース #25 25
配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
getDocument() は、これらをオブジェクトにマップする
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "0": "value0", "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" }}
2016/9/19 EWD 3 トレーニング・コース #25 26
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 27
?
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら ?
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 28
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?もし2番目の項目がディスク上に存在しなくなったら ?要素の番号がもはや一致しなくなります
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"
myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1",
"value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 29
myDoc("d",3) myObj.d[2]
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?もし2番目の項目がディスク上に存在しなくなったら ?setDocument() を再度用いると問題が生じます
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value3"myDoc("d",3)="value4"myDoc("d",4)="value5"myDoc("d",5)="value6"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 30
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?
整数以外の添字があると順序が狂います
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"myDoc("d","foo")="bar"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 31
?
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 32
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"myDoc("d","foo")="bar"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "0": "value0", "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" "foo": "bar" }}
2016/9/19 EWD 3 トレーニング・コース #25 33
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?整数の順序が狂っていない添字なら配列にマップ可能? これは、性能上に大きな問題が生じることになるでしょう
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6" … 省略 …myDoc("d",301839979)="not good"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" … "not good" ]}2016/9/19 EWD 3 トレーニング・コース #25 34
配列のマッピング何故 JavaScript の配列にマッピングしないのでしょうか?整数の順序が狂っていない添字なら配列にマップ可能? これは、性能上に大きな問題が生じることになるでしょう すべての添字値をチェックする必要が生じるのですmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6" … 省略 …myDoc("d",301839979)="not good"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" … "not good" ]}2016/9/19 EWD 3 トレーニング・コース #25 35
何百万もの添字をチェックすることはできますが…
配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
getDocument() は、性能維持のためにオブジェクトとの間 でマップします
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "0": "value0", "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" }}
2016/9/19 EWD 3 トレーニング・コース #25 36
配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.setDocument(myObj);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
そして、 JavaScript オブジェクトと両方向の変換で曖昧さを 排除したマッピングのためです
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "0": "value0", "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" }}
2016/9/19 EWD 3 トレーニング・コース #25 37
マップされた配列を利用するvar myDoc = new this.documentStore.DocumentNode('myDoc');var myObj = myDoc.getDocument();
for (var index in myObj.d) { console.log('element index: ' + myObj.d[index]); }
forEach 何とかではなく、ループには for を使う必要 があります
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "0": "value0", "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" }}
2016/9/19 EWD 3 トレーニング・コース #25 38
JavaScript 配列についてはどうなる?
JavaScript には正式な配列型があります
例えば右の myObj.d は JavaScript の配列です
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 39
JavaScript 配列についてはどうなる?
JavaScript には正式な配列型があります
例えば右の myObj.d は JavaScript の配列です
これらを setDocument() はどのように処理するのでしょう?
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 40
setDocument() による配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');myDoc.delete()myDoc.setDocument(myObj);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 41
setDocument() による配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');myDoc.delete()myDoc.setDocument(myObj);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value0"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
ゼロ「 0 」から始まる整数連番の添え字にマッピングされます
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value0", "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 42
従来の Global ストレージのマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');myDoc.delete()myDoc.setDocument(myObj);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
従来の MUMPS を統合する場合、 1 から始まる連番に ついてはどうなるでしょうか?
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 43
?
従来の Global ストレージのマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
getDocument() によるマッピングは正しく働きます
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" }}
2016/9/19 EWD 3 トレーニング・コース #25 44
従来の Global ストレージのマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');myDoc.delete()myDoc.setDocument(myObj);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
オブジェクトからの逆のマッピングも正しく作動します
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { "1": "value1", "2": "value2", "3": "value3", "4": "value4", "5": "value5", "6": "value6" }}
2016/9/19 EWD 3 トレーニング・コース #25 45
setDocument() による配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');myDoc.delete()myDoc.setDocument(myObj);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",0)="value1"myDoc("d",1)="value2"myDoc("d",2)="value3"myDoc("d",3)="value4"myDoc("d",4)="value5"myDoc("d",5)="value6"
しかし、配列からはゼロ「 0 」に始まる整数連番の添え字に マッピングされます
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 46
setDocument() による配列のマッピングvar myDoc = new this.documentStore.DocumentNode('myDoc');myDoc.delete()var offset = 1;myDoc.setDocument(myObj, offset);
myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d",1)="value1"myDoc("d",2)="value2"myDoc("d",3)="value3"myDoc("d",4)="value4"myDoc("d",5)="value5"myDoc("d",6)="value6"
第2引数としてオフセットを指定しなければ、です
myObj = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: [ "value1", "value2", "value3", "value4", "value5", "value6" ]}
2016/9/19 EWD 3 トレーニング・コース #25 47