フィールド範囲の指定

ストアで複数キー操作を行う場合、操作対象の行の範囲を指定できます。これは、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には、一般的な名前(BobPatriciaRobertなど)が含まれます。

このとき、surnameがSmithのユーザーに関連するすべての行に操作を実行できますが、フィールド範囲を指定して、familiarNameがアルファベット順でBobからPatriciaまでに含まれるユーザーのみに結果セットを制限することもできます。

FieldRangeFieldRangeクラスを使用して作成され、このクラスは、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();