Node.js 如何在Cassandra中使用cqlsh插入带有map字段的自定义类型?
我遇到了这样的错误:Node.js 如何在Cassandra中使用cqlsh插入带有map字段的自定义类型?,node.js,cassandra,cqlsh,Node.js,Cassandra,Cqlsh,我遇到了这样的错误: field is not of type frozen<map<text, boolean>> 我将节点版本更新为v0.12.4。但是nodejs cassandra驱动程序没有给我预期的响应 //filename: udt.js var cassandra = require('cassandra-driver'); var options = { contactPoints: ["192.168.2.203"], keyspa
field is not of type frozen<map<text, boolean>>
我将节点版本更新为v0.12.4。但是nodejs cassandra驱动程序没有给我预期的响应
//filename: udt.js
var cassandra = require('cassandra-driver');
var options = {
contactPoints: ["192.168.2.203"],
keyspace: "test",
encoding: {
map: Map,
set: Set
}
};
var client = new cassandra.Client(options);
client.connect(function (err) {
if(err){
console.info("connect err", err);
return;
}
var query = 'select * from app';
client.execute(query, function(err, result){
if (err) {
console.info("query err", err);
return;
}
console.info(result.rows);
});
});
看到结果了吗
manu@kochi:~/app/test$ node udt.js
[ { id: Uuid: 7031d49e-70cf-450d-90d8-178fa97c5e67,
defaultsetting:
{ timeout: Thu Jan 01 1970 05:30:00 GMT+0530 (IST),
capabilities: {} },
name: 'Test Cassandra' } ]
@BryceAtNetwork23知道为什么不使用节点cassandra驱动程序显示“功能”吗?这里是cqlsh中的一个示例。保存用户类型的列必须标记为冻结,这表示Cassandra将其序列化为单个值:
cqlsh:test> create type t(m map<text, boolean>);
cqlsh:test> create table foo(k int primary key, v frozen<t>);
cqlsh:test> insert into foo(k,v) values (1, {m: {'foo': true}});
cqlsh:test> select * from foo;
k | v
---+--------------------
1 | {m: {'foo': True}}
(1 rows)
我来回答你问题的第二部分 知道如何使用nodejs cassandra驱动程序实现这一点吗 根据我在中看到的,您应该使用Javascript对象作为映射值,使用类似于Oliver所指出的命名约定:
var key = 1;
var m = {
foo: true
};
var query = 'UPDATE foo SET v = ? WHERE k = ?';
client.execute(query, [m, key], { prepare: true}, callback);
您使用的是哪一版本的cqlsh?它看起来是一个旧版本,不能很好地显示自定义类型。当你开始连接时,它会说什么?类似于在127.0.0.1:9042连接到v210。[cqlsh 5.0.1 | Cassandra 2.1.0-SNAPSHOT | CQL spec 3.2.0 |本机协议v3]C:\Users\Useer>python C:\python27_x64\Scripts\cqlsh 192.168.2.203在192.168.2.203:9160连接到测试集群。[cqlsh 4.1.1 | Cassandra 2.1.5 | CQL规范3.1.1 |节俭协议19.39.0]使用帮助获取帮助。我发现链接已断开helpful@Scaramouche编辑制作。谢谢你发布新的链接!
cqlsh:test> create type t(m map<text, boolean>);
cqlsh:test> create table foo(k int primary key, v frozen<t>);
cqlsh:test> insert into foo(k,v) values (1, {m: {'foo': true}});
cqlsh:test> select * from foo;
k | v
---+--------------------
1 | {m: {'foo': True}}
(1 rows)
var key = 1;
var m = {
foo: true
};
var query = 'UPDATE foo SET v = ? WHERE k = ?';
client.execute(query, [m, key], { prepare: true}, callback);