2016-05-05 29 views
5

Próbuję pobrać klucz podstawowy w kliencie node.js firmy Aerospike za pomocą metody client.get(). Wstawiłem rekordy za pomocą client.put(), zmieniając politykę na Aerospike.policy.key.SEND, jak wspomniano here i here.Pobierz klucz podstawowy od Aerospike node.js client

Teraz chcę odzyskać dane wraz z kluczem podstawowym. Próbowałem zrobić to tak, jak wspomniano w Aerospike Documentation, ale nie wydaje się działać.

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

uzyskać wszystkie kosze, ale nie klucz podstawowy. Czy coś mi umyka?

Z góry dziękuję.

+2

Hi Abhijith, jeśli spojrzeć w dokumentacji API dla osób [Klient # get] (http://www.aerospike.com/apidocs/nodejs/Client.html#get__anchor) zadzwoń, aby zobaczyć, że [Klient ~ recordCallback] (http://www.aerospike.com/apidocs/ nodejs/Client.html # ~ recordCallback) funkcja wywołania zwrotnego dla tej operacji bazy danych ma właściwie 4 parametry: function (błąd, rekord, metadane, klucz). –

Odpowiedz

5

Czwartym parametrem funkcji jest informacja o żądanym kluczu głównym.

Weź mój kod jako przykład:

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

Wyjście jest:

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 } 

Wersja sterownika jest [email protected]

+1

to dobry przykład. Dzięki! –

2

Przeglądasz dokumentację starszego klienta 1.x. Dokumentacja dla klienta 2.x znajduje się pod adresem: http://www.aerospike.com/apidocs/nodejs/

Dopóki klucz jest zapisany w operacji zapisu, powinieneś być w stanie uzyskać go z kolejnymi odczytami.

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

Dzięki Ronen, ale nadal nie działa dla mnie. Nie jestem pewien, czego mi brakuje. Również, gdy uruchomię zapytanie w AQL dla zestawu typu Select * from test.test, otrzymam klucz i wszystkie pojemniki. Jednak, gdy próbuję coś takiego jak 'select * from test.test gdzie klucz = 1 ', to mówi„0 Records w zestawie” mogę odzyskać rekord używając' select * from test.test gdzie PK = 1' Czy to normalne zachowanie? –

+1

PK to zarezerwowane słowo, którego potrzebujesz. Możesz użyć 'help', aby zobaczyć składnię AQL. Którą wersję klienta węzła używasz? –

+2

W rzeczywistości dokumenty na stronie [www.aerospike.com/docs/client/nodejs/](http://www.aerospike.com/docs/client/nodejs/) zostały zaktualizowane w celu uwzględnienia wersji klienta 2. Ale skupiają się bardziej na ogólnych koncepcjach i użytkowaniu; Aby uzyskać szczegółowe informacje na temat konkretnych wywołań API, lepiej jest zapoznać się z nowymi dokumentami API na stronie [www.aerospike.com/apidocs/nodejs/](http://www.aerospike.com/apidocs/nodejs/). –

Powiązane problemy