【问题标题】:Retrieve Primary Key from Aerospike node.js client从 Aerospike node.js 客户端检索主键
【发布时间】:2016-08-31 05:00:48
【问题描述】:

我正在尝试使用 client.get() 检索 Aerospike node.js 客户端中的主键。如here 和here 所述,我通过将策略更改为 Aerospike.policy.key.SEND 使用 client.put() 插入了记录。

现在我想检索记录以及主键。 我尝试像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){}

我得到了所有的垃圾箱,但没有得到主键。我在这里错过了什么吗?

提前致谢。

【问题讨论】:

  • 嗨 Abhijith,如果您查看Client#get 调用的 API 文档,您可以看到此数据库操作的 Client~recordCallback 回调函数实际上有 4 个参数:函数(错误、记录、元数据, 键)。

标签: node.js aerospike


【解决方案1】:

您正在查看旧版 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)
    })
  })
})

【讨论】:

  • 感谢 Ronen,但它仍然对我不起作用。不知道我错过了什么。此外,当我在 AQL 中为 Select * from test.test 之类的集合运行查询时,我得到了密钥和所有 bin。但是,当我尝试select * from test.test where key=1 之类的操作时,它显示“0 Records in Set”我可以使用select * from test.test where PK=1 检索记录这是正常行为吗?
  • PK 是您需要的保留字。您可以使用help 查看 AQL 的语法。您使用的是哪个版本的节点客户端?
  • 实际上www.aerospike.com/docs/client/nodejs/ 的文档也已更新为涵盖客户端版本 2。但他们更关注一般概念和用法;有关特定 API 调用的详细信息,最好在www.aerospike.com/apidocs/nodejs/ 查阅新的 API 文档。
【解决方案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 }

驱动版本为aerospike@2.0.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多