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