2016-05-05 31 views
5

Sto provando a recuperare la chiave primaria nel client node.js di Aerospike utilizzando client.get(). Ho inserito i record utilizzando client.put() modificando la politica in Aerospike.policy.key.SEND come menzionato here e here.Recupera chiave primaria dal client aerospike node.js

Ora voglio recuperare i record insieme alla chiave primaria. Ho provato a farlo in questo modo, come indicato nello Aerospike Documentation ma non sembra funzionare.

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

Ricevo tutti i contenitori ma non la chiave primaria. Mi sto perdendo qualcosa qui?

Grazie in anticipo.

+2

Hi Abhijith, se si guarda la documentazione API per la [Client # get] (http://www.aerospike.com/apidocs/nodejs/Client.html#get__anchor) chiamata puoi vedere che il [Client ~ recordCallback] (http://www.aerospike.com/apidocs/ nodejs/Client.html # ~ recordCallback) La funzione di callback per questa operazione di database ha in realtà 4 parametri: function (error, record, metadata, key). –

risposta

5

Il quarto parametro della funzione è informazioni sulla chiave primaria desiderata.

Prendete il mio codice come ad esempio:

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

l'output è:

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 } 

La versione del driver è [email protected]

+1

questo è un buon esempio. Grazie! –

2

Si sta guardando la documentazione del client 1.x meno recente. La documentazione per il client 2.x è http://www.aerospike.com/apidocs/nodejs/

Finché la chiave è memorizzata nell'operazione di scrittura, si dovrebbe essere in grado di ottenerla con le letture successive.

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

Grazie Ronen, ma non funziona ancora per me. Non sono sicuro di cosa mi manchi. Inoltre, quando eseguo una query in AQL per il set come Seleziona * da test.test, ottengo la chiave e tutti i raccoglitori. Tuttavia, quando provo qualcosa come 'select * da test.test where key = 1', dice" 0 Records in Set " Posso recuperare il record usando' select * da test.test dove PK = 1' È normale questo comportamento? –

+1

PK è la parola riservata di cui hai bisogno. Puoi usare 'help' per vedere la sintassi di AQL. Quale versione del client del nodo stai usando? –

+2

In realtà i documenti su [www.aerospike.com/docs/client/nodejs/](http://www.aerospike.com/docs/client/nodejs/) sono stati aggiornati per coprire anche la versione 2 del client. Ma si concentrano maggiormente su concetti generali e utilizzo; per informazioni dettagliate su chiamate API specifiche è meglio consultare i nuovi documenti API all'indirizzo [www.aerospike.com/apidocs/nodejs/](http://www.aerospike.com/apidocs/nodejs/). –