2016-05-05 10 views
5

Ich versuche, den Primärschlüssel im Aerospike node.js-Client mithilfe von client.get() abzurufen. Ich habe die Datensätze mit client.put() eingefügt, indem ich die Richtlinie in Aerospike.policy.key.SEND wie erwähnt geändert here und here.Abrufen des Primärschlüssels von Aerospike node.js Client

Jetzt möchte ich die Datensätze zusammen mit dem Primärschlüssel abrufen. Ich versuchte es so, wie in der Aerospike Documentation erwähnt, aber es scheint nicht zu funktionieren.

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

Ich bekomme alle Bins, aber nicht den Primärschlüssel. Fehle ich hier etwas?

Vielen Dank im Voraus.

+2

Hallo Abhijith, wenn Sie für die in der API-Dokumentation aussehen [Client # Get] (http://www.aerospike.com/apidocs/nodejs/Client.html#get__anchor) Aufruf Sie können sehen, dass der [Client ~ recordCallback] (http://www.aerospike.com/apidocs/ nodejs/Client.html # ~ recordCallback) Callback-Funktion für diese Datenbankoperation hat tatsächlich 4 Parameter: Funktion (Fehler, Datensatz, Metadaten, Schlüssel). –

Antwort

5

Die vierte Paramater der Funktion ist es, Informationen über Primärschlüssel Sie wollen.

meinen Code als Beispiel nehmen:

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) 
    } 
    }) 

Die Ausgabe lautet:

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 } 

Die Version des Treibers ist [email protected]

+1

das ist ein gutes Beispiel. Vielen Dank! –

2

Sie sehen sich die Dokumentation des älteren 1.x-Clients an. Die Dokumentation für den 2.x-Client lautet wie folgt: http://www.aerospike.com/apidocs/nodejs/

Solange der Schlüssel in der Schreiboperation gespeichert wird, sollten Sie in der Lage sein, es mit nachfolgenden Lesevorgängen zu erhalten.

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

Danke Ronen, aber es funktioniert immer noch nicht für mich. Nicht sicher, was ich vermisse. Wenn ich eine Abfrage in AQL für das Set wie Select * von test.test ausführen, bekomme ich den Schlüssel und alle Bins. Wenn ich etwas wie 'select * from test.test where key = 1' versuche, heißt es" 0 Records in Set " Ich kann den Datensatz mit' select * from test.test mit PK = 1' abrufen Ist das normales Verhalten? –

+1

PK ist das reservierte Wort, das Sie benötigen. Sie können 'help' verwenden, um die AQL-Syntax anzuzeigen. Welche Version des Knoten-Clients verwenden Sie? –

+2

Tatsächlich wurden die Dokumente unter [www.aerospike.com/docs/client/nodejs/](http://www.aerospike.com/docs/client/nodejs/] aktualisiert, um auch die Client-Version 2 abzudecken. Aber sie konzentrieren sich mehr auf allgemeine Konzepte und Verwendung; Für detaillierte Informationen über bestimmte API-Aufrufe ist es in der Tat besser, die neuen API-Dokumente unter [www.aerospike.com/apidocs/nodejs/](http://www.aerospike.com/apidocs/nodejs/) zu konsultieren. –

Verwandte Themen