Contenu connexe
Similaire à EWD 3トレーニングコース#25 GlobalストレージのJavaScript用抽象化 - (f) Documentデータベースのできること (16)
Plus de Kiyoshi Sawada (17)
EWD 3トレーニングコース#25 GlobalストレージのJavaScript用抽象化 - (f) Documentデータベースのできること
- 3. 1対1 対応
myDoc("a") = 123
myDoc("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 3
- 5. DocumentNode オブジェクトのインスタンス化
var doc = new this.documentStore.DocumentNode('myDoc');
myDoc("a") = 123
myDoc("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
- 6. getDocument()
var doc = new this.documentStore.DocumentNode('myDoc');
var myObj = doc.getDocument();
myDoc("a") = 123
myDoc("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'
}
}
}
- 7. getDocument()
var doc = new this.documentStore.DocumentNode('myDoc');
var myObj = doc.getDocument();
myDoc("a") = 123
myDoc("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'
}
}
}
- 8. 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'
}
}
}
- 9. 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'
}
}
}
- 10. setDocument()
var myObj = { //右に示すオブジェクトを生成する }
var doc = new this.documentStore.DocumentNode('myDoc');
doc.setDocument(myObj);
myDoc("a") = 123
myDoc("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'
}
}
}
生成する
- 11. setDocument()
var myObj = { //右に示すオブジェクトを生成する }
var doc = new this.documentStore.DocumentNode('myDoc');
doc.setDocument(myObj);
myDoc("a") = 123
myDoc("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 ストレージの節(ノード)と対応されました
- 12. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
myDoc("a") = 123
myDoc("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
- 13. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = dnode.getDocument()
myDoc("a") = 123
myDoc("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'
}
}
- 14. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = dnode.getDocument()
myDoc("a") = 123
myDoc("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") の下位節(下位ノード)
の部分木だけから生成されます
- 15. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
myDoc("a") = 123
myDoc("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
- 16. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
myDoc("a") = 123
myDoc("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'
}
}
- 17. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("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")=1000
myDoc("d","h2","w1")="foo"
myDoc("d","h2","w2")="bar"
2016/9/19 EWD 3 トレーニング・コース #25 17
myObj = {
g: 1000,
h2: {
w1: 'foo',
w2: 'bar'
}
}
- 18. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("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'
}
}
- 19. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("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")=1000
myDoc("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'
}
}
- 20. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.delete();
myDoc("a") = 123
myDoc("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'
}
}
- 21. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.delete();
myDoc("a") = 123
myDoc("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'
}
}
- 22. 任意のDocumentNodeに適応できること
これらのメソッドは、ディスク上の Document の任意のレベルのノードに適用できます
var dnode = new this.documentStore.DocumentNode('myDoc', ['d']);
var myObj = { // 右に示したオブジェクトを生成します };
dnode.delete();
dnode.setDocument(myObj);
myDoc("a") = 123
myDoc("b","c1")="foo"
myDoc("b","c2")="foo2"
myDoc("d","e2","f3b")="new value"
myDoc("d","e2","f4b")="bar4b"
myDoc("d","g")=1000
myDoc("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'
}
}
- 26. 配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123
myDoc("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
- 27. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
myDoc("a")=123
myDoc("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
?
- 28. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら?
myDoc("a")=123
myDoc("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
- 29. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら?
要素の番号がもはや一致しなくなります
myDoc("a")=123
myDoc("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]
- 30. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
もし2番目の項目がディスク上に存在しなくなったら?
setDocument() を再度用いると問題が生じます
myDoc("a")=123
myDoc("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
- 31. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数以外の添字があると順序が狂います
myDoc("a")=123
myDoc("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
?
- 32. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
myDoc("a")=123
myDoc("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
- 33. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
myDoc("a")=123
myDoc("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
- 34. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
これは、性能上に大きな問題が生じることになるでしょう
myDoc("a")=123
myDoc("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
- 35. 配列のマッピング
何故 JavaScript の配列にマッピングしないのでしょうか?
整数の順序が狂っていない添字なら配列にマップ可能?
これは、性能上に大きな問題が生じることになるでしょう
すべての添字値をチェックする必要が生じるのです
myDoc("a")=123
myDoc("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
何百万もの添字をチェックするこ
とはできますが…
- 36. 配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123
myDoc("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
- 37. 配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("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
- 38. マップされた配列を利用する
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
- 40. 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
- 41. setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("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
- 42. setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("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
- 43. 従来のGlobalストレージのマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("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
?
- 44. 従来のGlobalストレージのマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
var myObj = myDoc.getDocument();
myDoc("a")=123
myDoc("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
- 45. 従来のGlobalストレージのマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("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
- 46. setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
myDoc.setDocument(myObj);
myDoc("a")=123
myDoc("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
- 47. setDocument() による配列のマッピング
var myDoc = new this.documentStore.DocumentNode('myDoc');
myDoc.delete()
var offset = 1;
myDoc.setDocument(myObj, offset);
myDoc("a")=123
myDoc("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