2016-05-03 19 views
4

私はAerospikeからプライマリキーと共にすべてのレコードを取得しようとしています。私は、プライマリkey.Howを除くすべてのフィールドを取得しています。このとAerospike Node.jsクライアントでプライマリキーを取得する方法

var query = client.query(aerospikeDBParams.dbName,"testRecords"); 
var stream = query.execute(); 

以下のようにclient.query機能を使用してみました iは、他の分野と一緒に主キーを取得することができますか?あなたが最初に実際recordと主キーを格納する必要があり、事前

答えて

3

感謝。クライアントとサーバーはダイジェストを使用してレコードを探します。ダイジェストはクライアントが(namespace、set、primary-key)情報を使用してハッシュします。キー書き込みポリシーのデフォルト値はAerospike.policy.key.DIGESTです。代わりに明示的にそれをAerospike.policy.key.SENDに設定する必要があります。

Aerospike:moduleのマニュアルを参照してください。それは、この例が含まれています

// global policy, applied to all commands that do not override it 
var config = { 
    policies: { 
    timeout: 100, 
    retry: Aerospike.policy.retry.ONCE 
    } 
} 

Aerospike.connect(config, (error, client) => { 
    if (error) throw error 

    var key = new Aerospike.Key('test', 'demo', 'k1') 
    var record = {i: 1234} 

    // override policy for put command 
    var policy = { 
    exists: Aerospike.policy.exists.CREATE, 
    key: Aerospike.policy.key.SEND 
    } 

    client.put(key, record, {}, policy, (error) => { 
    if (error && error.code === Aerospike.status.AEROSPIKE_ERR_RECORD_EXISTS) { 
     console.info('record already exists') 
    } else if (error) { 
     throw error 
    } 
    client.close() 
    }) 
}) 

キーがレコードに格納されている場合、クエリがそれらを返します。

+1

これは、サーバーにキー情報を入力する方法です。しかし、クエリメソッドはrecordStreamを返します。データイベントのみが返されます(ビン、メタ)、私は 'key'を見つけることができません。 Javaクライアントの考えを使用するのは大丈夫です。 –

+1

@Ronenそれは..ありがとう:) –

+1

@ sel-fish、あなたは正しいです:v2.0.3現在、クライアントのレコードストリーム 'data'イベントはレコードキーを含んでいません。これはv1クライアントの[回帰](https://github.com/aerospike/aerospike-client-nodejs/issues/126)です。次のパッチリリースでこれを修正します。 –

関連する問題