フィールド範囲の指定
ストアで複数キー操作を行う場合、操作対象の行の範囲を指定できます。これは、FieldRange
オブジェクトを使用して行います。このクラスは、一括読取りを行うすべてのメソッドに受け入れられます。このオブジェクトは、選択した行をフィールド値の一致する範囲に制限するために使用されます。
たとえば、次のような表を定義したとします。
CREATE TABLE myTable (
surname STRING,
familiarName STRING,
userID STRING,
phonenumber STRING,
address STRING,
email STRING,
dateOfBirth STRING,
PRIMARY KEY (SHARD(surname, familiarName), userID)
)
surname
には、個人の姓(Smith
など)が含まれます。familiarName
には、一般的な名前(Bob
、Patricia
、Robert
など)が含まれます。
このとき、surnameがSmith
のユーザーに関連するすべての行に操作を実行できますが、フィールド範囲を指定して、familiarNameがアルファベット順でBob
からPatricia
までに含まれるユーザーのみに結果セットを制限することもできます。
FieldRange
はFieldRange
クラスを使用して作成され、このクラスは、Options
オブジェクトを使用して複数読取り操作を実行するために使用するメソッドに指定します。このクラスには、範囲を設定する主キー・フィールドの名前と、範囲値(両端の値が含まれるかどうかを含む)が必要です。
このケースでは、文字列"Bob"を使用してキー範囲の始まりを定義し、キー範囲の終わりを"Patricia"と定義します。キー範囲の両端は含まれます。
この例ではTableIterator
を使用しますが、Store.multiGet()
またはStore.multiGetKeys()
メソッドなど、複数行の読取り操作でも同様にこの範囲を簡単に使用できます。
...
// Store handle configuration and open skipped for brevity
...
// Open the store with the specified configuration
var store = nosqldb.createStore(configuration);
store.on('open', function () {
console.log('Store opened');
// Using a partial primary key for
// this iteration
var key = {surname: "Smith"};
var fieldRange = new nosqldb.Types.FieldRange(
"familiarName", "Bob", true,
"Patricia", true);
store.tableIterator('myTable', key, {
fieldRange: fieldRange,
// Must be UNORDERED because we are iterating
// using a partial primary key.
direction: nosqldb.Types.Direction.UNORDERED
},
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();