在Cassandra中使用带有nodejs的用户定义类型

时间:2014-11-04 09:52:31

标签: javascript node.js cassandra

我正在尝试在带有nodejs的Cassandra中使用用户定义的类型。 在文档之后,我成功地设法在cqlsh(https://www.datastax.com/documentation/cql/3.1/cql/cql_using/cqlUseUDT.html)中完成。我设法在cqlsh中插入项目但不使用cassandra-driver模块。

我知道他们对使用javascript(http://www.datastax.com/documentation/developer/nodejs-driver/1.0/nodejs-driver/reference/nodejs2Cql3Datatypes.html)有些错综复杂的做法,我尝试了不同的选项,但我无法让它工作。

以下是我的试用版及其产生的错误消息:

var insertQuery = 'INSERT INTO mykeyspace.users (id, name) VALUES (?, ?)'

client.execute(insertQuery, ['62c36092-82a1-3a00-93r1-46196ee77204', { firstname: 'paul', lastname: 'jacques'}], {hints: ['uuid', 'map<text, text>']}, function(err) { console.log(err);})
  
    

{ name: 'ResponseError', message: 'Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=9 cap=9]', info: 'Represents an error message from the server', code: 8704, query: 'INSERT INTO mykeyspace.users (id, name) VALUES (?, ?)' }

  
client.execute(insertQuery, ['62c36092-82a1-3a00-93r1-46196ee77204', { firstname: 'paul', lastname: 'jacques'}], { prepare: true }, function(err) { console.log(err);})

    { [TypeError: Not a valid blob, expected Buffer obtained { firstname: 'paul', lastname: 'jacques' }]
  query: 'INSERT INTO mykeyspace.users (id, name) VALUES (?, ?)' }

然后使用它的正确语法是什么?

NB。我正在使用cassandra 2.1.1

1 个答案:

答案 0 :(得分:2)

DataStax Node.js驱动程序尚不支持用户定义类型,因此驱动程序无法相应地序列化数据。

您可以在CQL中使用json表示法来访问各个字段。例如,以下查询将起作用:

SELECT addr.street, addr.city FROM location WHERE id=?;

UPDATE SET addr['street'] = ?, addr['city'] = ? WHERE id = ?