2016-05-05 9 views
5

私は、client.get()を使用してAerospike node.jsクライアントのプライマリキーを取得しようとしています。上記のherehereのように、ポリシーをAerospike.policy.key.SENDに変更して、client.put()を使用してレコードを挿入しました。Aerospike node.jsクライアントからプライマリキーを取得

今、プライマリキーと共にレコードを取得したいと思います。 Aerospike Documentationで述べたようにこれをやってみましたが、うまくいかないようです。

var key = aerospike.key(aerospikeDBParams.defaultNamespace,aerospikeDBParams.defaultSet,count); 
    var readpolicy = { 
     key: aerospike.policy.key.SEND 
    } 
    client.get(key, readpolicy, function(err, rec, meta){} 

私はすべてのビンを取得しますが、プライマリキーは取得しません。私はここに何かを逃していますか

ありがとうございます。

+2

こんにちはアブヒジスです[Client#get](http://www.aerospike.com/apidocs/nodejs/Client.html#get__anchor)コールを見ると、[Client〜recordCallback](http://www.aerospike.com/apidocs/) nodejs/Client.html# 〜recordCallback)このデータベース操作のコールバック関数は、実際には関数(エラー、レコード、メタデータ、キー)の4つのパラメータを持っています。 –

答えて

5

第4の機能のパラメータは、必要な主キーに関する情報です。

は、一例として、私のコードを取る:

var readpolicy = { 
     key: Aerospike.policy.key.SEND 
    } 
    var key = new Aerospike.Key(ns, set, "sel-fish") 
    client.get(key, readpolicy, function (err, record, metadata, key) { 
    if (null == err) { 
     console.log("get ok") 
     console.log(record) 
     console.log(metadata) 
     console.log(key) 
    } 
    }) 

出力は、次のとおりです。あなたがのためのAPIドキュメントを見れば

get ok 
{ uid: 1000, 
    name: 'sel-fish', 
    dob: { mm: 12, dd: 29, yy: 1995 }, 
    friends: [ 1001, 1002, 1003 ], 
    avatar: <Buffer 0a 0b 0c> } 
{ ttl: 431997, gen: 3 } 
Key { ns: 'test', set: '14', key: 'sel-fish', digest: null } 

ドライバのバージョンは、[email protected]

+1

これは良い例です。ありがとう! –

2

古い1.xクライアントのドキュメントがあります。 2.xクライアントのドキュメントは次の場所にありますhttp://www.aerospike.com/apidocs/nodejs/

キーが書き込み操作に格納されている限り、それ以降の読み取りでそれを取得できるはずです。

const Aerospike = require('aerospike') 
function assertOk (error, message) { 
    if (error) { 
    console.error('ERROR - %s: %s [%s]\n%s', message, error.message, error.code, error.stack) 
    throw error 
    } 
} 

const Key = Aerospike.Key 

Aerospike.connect({ hosts: '127.0.0.1:3000' }, function (error, client) { 
    assertOk(error, 'Connecting to Aerospike cluster') 

    var key = new Aerospike.Key('test', 'demo', 1) 
    var bins = { a: 1, b: 2 } 
    var policy = { 
    key: Aerospike.policy.key.SEND 
    } 

    client.put(key, bins, {}, policy, function (error) { 
    assertOk(error, 'Writing database record') 

    client.get(key, function (error, record, meta) { 
     assertOk(error, 'Reading database record') 

     console.log(record, meta) 
    }) 
    }) 
}) 
+1

Ronenに感謝します。でも、それでも私にとってはうまくいきません。私は何が欠けているか分からない。 また、Select *からtest.testのようなセットのAQLでクエリを実行すると、キーとすべてのビンが取得されます。 しかし、私は 'select * from test.test where key = 1'のようなものを試してみると、" 0 Records in Set "と書かれています ' select * from test.test where PK = 1' これは正常な動作ですか? –

+1

PKは必要な予約語です。 'help 'を使ってAQLの構文を見ることができます。どのバージョンのノードクライアントを使用していますか? –

+2

実際、[www.aerospike.com/docs/client/nodejs/](http://www.aerospike.com/docs/client/nodejs/)のドキュメントもクライアントバージョン2をカバーするように更新されています。しかし、彼らは一般的な概念や使い方にもっと焦点を当てています。特定のAPI呼び出しの詳細については、新しいAPIドキュメント[www.aerospike.com/apidocs/nodejs/](http://www.aerospike.com/apidocs/nodejs/)を参照してください。 –