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