Получить первичный ключ от клиента Aerospike node.js

Я пытаюсь получить первичный ключ в клиенте Aerospike node.js, используя client.get(). Я вставил записи с помощью client.put(), изменив политику на Aerospike.policy.key.SEND, как указано здесь и здесь.

Теперь я хочу получить записи вместе с первичным ключом. Я попытался сделать это так, как указано в Документация Aerospike. но, похоже, это не работает.

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

Я получаю все корзины, но не первичный ключ. Я что-то упустил здесь?

Заранее спасибо.


person Abhijith S    schedule 05.05.2016    source источник
comment
Привет, Abhijith, если вы посмотрите документацию по API для Client#get можно увидеть, что функция обратного вызова Client~recordCallback для эта операция базы данных на самом деле имеет 4 параметра: функция (ошибка, запись, метаданные, ключ).   -  person Jan Hecking    schedule 07.05.2016


Ответы (2)


Четвертый параметр функции — это информация о необходимом первичном ключе.

Возьмите мой код в качестве примера:

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

Результат:

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]

person sel-fish    schedule 06.05.2016

Вы просматриваете документацию старого клиента 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)
    })
  })
})
person Ronen Botzer    schedule 06.05.2016
comment
Спасибо, Ронен, но у меня это все еще не работает. Не уверен, что мне не хватает. Кроме того, когда я запускаю запрос в AQL для набора, например Select * from test.test, я получаю ключ и все бины. Однако, когда я пытаюсь что-то вроде select * from test.test where key=1, он говорит, что 0 записей в наборе. Я могу получить запись, используя select * from test.test where PK=1 Это нормальное поведение? - person Abhijith S; 06.05.2016
comment
PK — это зарезервированное слово, которое вам нужно. Вы можете использовать help, чтобы увидеть синтаксис AQL. Какую версию клиента узла вы используете? - person Ronen Botzer; 06.05.2016
comment
На самом деле документы на www.aerospike.com/docs/client/nodejs/ содержат был обновлен, чтобы покрыть клиент версии 2, а также. Но они больше сосредоточены на общих понятиях и использовании; для получения подробной информации о конкретных вызовах API действительно лучше обратиться к новой документации по API на www.aerospike.com /apidocs/nodejs/. - person Jan Hecking; 07.05.2016