索引の読取り
表の索引を使用して表の行を取得するには、Store.indexIterator()
を使用します。表の主キーを使用して表の行を読み取るためにTableIterator
を使用する場合と同様に、索引を使用して読み取る場合、フィールド範囲、トラバース方向などのオプションを設定できます。デフォルトでは、索引スキャンはFORWARD順にエントリを返します。
たとえば、次のような表を定義したとします。
CREATE TABLE myTable (
surname STRING,
familiarName STRING,
userID STRING,
phonenumber STRING,
address STRING,
email STRING,
dateOfBirth STRING,
PRIMARY KEY (SHARD(surname, familiarName), userID)
)
CREATE INDEX DoB ON myTable (dateOfBirth)
これにより、dateOfBirth
フィールドの値に基づいて表myTable
のDoB
という名前の索引が作成されます。 索引をスキャンするには、次の手順を実行します。
...
// Store handle configuration and open skipped for brevity
...
store.on('open', function () {
console.log('Store opened');
store.indexIterator('myTable', 'DoB', {},
function (err, iterator) {
if (err)
throw err;
else {
// Configure Iterator event done
iterator.on('done', function() {
store.close();
});
console.log("Retrieved rows:");
iterator.forEach(function (err, returnRow) {
if (err)
throw err;
else
console.log(returnRow.row);
console.log('\n');
});
}
});
}).on('close', function() {
console.log('Store closed.');
}).on('error', function(error) {
console.log(error);
});
store.open();
前述の例では、コードはDoB
索引で索引付けされたすべての行を調べます。さらに便利なことに、この場合の例では、フィールド範囲の使用によって返される行を制限することになります。これは、FieldRange
オブジェクトを構築することで行います。これを行うには、範囲の基になるフィールドを指定する必要があります。索引は複数の表フィールドに基づくことができるため、オブジェクトを指定するフィールド名は索引付けされたフィールドの1つである必要があります。
たとえば、行がyyyy-mm-dd
の形式で日付を保持している場合、次のように1994年5月に生まれたすべての人を取得できます。この索引では、1つのフィールドdateOfBirth
のみが調べられるため、フィールド名をFieldRange
オブジェクトに渡します。
...
// Store handle configuration and open skipped for brevity
...
store.on('open', function () {
console.log('Store opened');
var fieldRange = new nosqldb.Types.FieldRange(
"dateOfBirth", "1994-05-01", true,
"1994-05-30", true);
store.indexIterator('myTable', 'DoB', {
fieldRange: fieldRange
},
function (err, iterator) {
if (err)
throw err;
else {
// Configure Iterator event done
iterator.on('done', function() {
store.close();
});
console.log("Retrieved rows:");
iterator.forEach(function (err, returnRow) {
if (err)
throw err;
else
console.log(returnRow.row);
console.log('\n');
});
}
});
}).on('close', function() {
console.log('Store closed.');
}).on('error', function(error) {
console.log(error);
});
store.open();