获取刚刚插入的行

时间:2017-11-30 09:35:23

标签: javascript node.js database cassandra cql

我的实际问题是我需要为每个用户生成唯一的ID。我在下面详述了我是如何尝试的以及我的解决方案给我的问题。

我正在使用cassandra-driver插入我的数据库表:

CREATE TABLE myspace.unpublished_question (
    user_id uuid PRIMARY KEY,
    account_created timestamp,
    first_name text,
    surname text
)

为了避免冲突,我想我会让cassandra为主键列自动生成uuid,所以我插入这样:

const cassandra = require('cassandra-driver');
const cassandraClient = new cassandra.Client({contactPoints: ['localhost'], keyspace: 'myspace'});

const query = 'insert into user (user_id, account_created, first_name, surname) values (uuid(), ?, ?, ?)';
const params = [new Date(), 'John', 'Smith'];
cassandraClient.execute(query, params, {prepare: true}, (err, results) => {
  console.log('Callback arguments:', err, JSON.stringify(results));
});

但它只记录了这个:

Callback: null {"info":{"queriedHost":"127.0.0.1:9042","triedHosts":{},"achievedConsistency":10},"columns":null,"pageState":null}

我无法检索cassandra刚为此条目生成的uuid

我怎样才能知道这个uuid是什么?

我希望能够做到这样的事情:

cassandraClient.execute(query, params, {prepare: true}, (err, results) => {
  const uuid = X;
  console.log('User has been given uuid:', uuid);
});

1 个答案:

答案 0 :(得分:0)

插入操作不提供插入的数据,因此无法在同一操作中从服务器获取它。

您需要生成TimeUuid客户端:

const id = TimeUuid.now();
client.execute(query, [ id, 'John', 'Smith' ], { prepare: true }, (err, result) => {
  // do something with the id
});

有关详细信息,请参阅TimeUuid上的Node.js文档:http://docs.datastax.com/en/developer/nodejs-driver/latest/features/datatypes/uuids/#time-uuid