埋込みレコードの索引付け

レコード・フィールドにスカラー・データが含まれている場合には、埋込みレコードに索引を作成できます。索引を作成するには、通常のレコードとして定義します。フィールドを索引付けするには、埋込みレコードの名前を指定し、さらに、ドット表記法を使用してフィールドの名前を指定します。

索引を作成するには、まず表を作成します。

CREATE Table myRecordTable (
    uid INTEGER,
    myRecord RECORD (firstField STRING, secondField INTEGER),
    PRIMARY KEY (uid)
) 

表がストアに追加された後、索引を作成します。

CREATE INDEX recordFieldIndex on myRecordTable (myRecord.secondField) 

表の行に指定した値が付いた指定したレコード・フィールドが含まれている場合、データが取得されます。つまり、たとえば、次のような一連の表の行を作成する場合、

function writeRow(store, uid, record) {

   var row = {
       uid: uid,
       myRecord: record
   };
   console.log("Putting row");
   store.put('myRecordTable', row,
           function (err) {
                if (err)
                    throw err;
                else {
                    console.log("Row inserted.");
                }
           });
   console.log("Row put");
}

...
// Store handle configuration and open skipped for brevity
...

store.on('open', function () {
   console.log('Store opened');


   writeRow(store, 12345, {firstField: "String field for 12345",
                           secondField: 3388});
   writeRow(store, 345, {firstField: "String field for 345",
                           secondField: 3388});
   writeRow(store, 111, {firstField: "String field for 111",
                          secondField: 12});
   store.close();
}).on('close', function() {
    console.log('Store closed.');
}).on('error', function(error) {
    console.log(error);
});
store.open(); 

指定した値に「secondField」が設定されている埋込みレコードを含む任意の表の行を取得できます。(前述の指定した埋込みレコード索引、索引付けされたmyRecord.secondField。)

一致する表の行を取得し、別の索引タイプと同じ方法で繰り返します。次に例を示します。

...
// Store handle configuration and open skipped for brevity
...

store.on('open', function () {
   console.log('Store opened');
   var indexKey1 = {myRecord: {secondField: 3388} }

   store.indexIterator('myRecordTable', 'recordFieldIndex',
            {indexKey: indexKey1},
            function (err, iterator) {
                  iterator.forEach(function (err, currentRow) {
                     console.log(currentRow.row);
                  });
                  store.close();
            }
   );

}).on('close', function() {
    console.log('Store closed.');
}).on('error', function(error) {
    console.log(error);
});
store.open();