Node.js 在查询中使用nodejs“cassandra驱动程序”准备查询

Node.js 在查询中使用nodejs“cassandra驱动程序”准备查询,node.js,cassandra,cqlsh,nosql,Node.js,Cassandra,Cqlsh,Nosql,这是一个潜在的新手问题,但我在野外找不到答案 我目前正在构建此表单的简单用户事件日志。为了保持简单,省略了一些属性: CREATE TABLE events.by_hour ( level tinyint, /* 60 = FATAL, 10 = TRACE */ hour int, /* in YYYYMMDDHH format */ insertion_time timeuuid, userid TEXT, message TEXT, PRIMARY KEY ((typ

这是一个潜在的新手问题,但我在野外找不到答案

我目前正在构建此表单的简单用户事件日志。为了保持简单,省略了一些属性:

CREATE TABLE events.by_hour (
  level tinyint, /* 60 = FATAL, 10 = TRACE */
  hour int, /*  in YYYYMMDDHH format */
  insertion_time timeuuid,
  userid TEXT,
  message TEXT,
PRIMARY KEY ((type,hour),userid,insertion_time))
WITH CLUSTERING ORDER BY (userid ASC, insertion_time ASC);
我想做一个准备好的查询,以获取给定用户在某些级别集上选择性筛选的所有事件,理想情况下需要几个小时

我可以轻松构建查询单个级别和时间的查询:

var cassandra = require('cassandra-driver');
var client = new cassandra.Client({contactPoints: ['127.0.0.1']});

var query 
    = 'SELECT * FROM events.by_hour 
      WHERE level IN (?) and hour IN (?) and userid = ?;';

var options = [ 10, 2016032117,'user_uuid' ];

client.execute(query, options, {
                    prepare: true
                }, function (err, result) {
                    // Do stuff... 
                    next(err);
                });
这在一个小时和一个级别内都可以正常工作。我希望在上面的查询中指定多个小时和级别,但使用代码时,我无法通过将集合指定为字符串或值数组来实现这一点

我想我是被迫这样做的:

根据需要的级别和小时数生成查询:

// for 1 level and 2 hours:
query = 'SELECT * FROM events.by_hour 
      WHERE level IN (?) and hour IN (?,?) and userid = ?;';

options = [ 10, 2016032117,2016032118,'user_uuid' ];

client.execute(query, options, {
                    prepare: true
                }, function (err, result) {
                    // Do stuff... 
                    next(err);
                });

// for 2 levels and 2 hours:
query = 'SELECT * FROM events.by_hour 
      WHERE level IN (?,?) and hour IN (?,?) and userid = ?;';

options = [ 10, 20, 2016032117,2016032118,'user_uuid' ];

client.execute(query, options, {
                    prepare: true
                }, function (err, result) {
                    // Do stuff... 
                    next(err);
                });
我不喜欢这个。但是,即使在这里,我仍然可以得到准备好的查询的好处,因为我们只需传入“prepared:true”。感觉应该有更好的方法。。。但我不确定我尝试做的是什么,甚至可以用一个准备好的查询

有人能在这里提供一些智慧吗

谢谢

应使用IN运算符,后跟查询标记无括号,并将查询标记的参数作为数组提供:

const query = 'SELECT * FROM events.by_hour WHERE level IN ? and ' + 
              'hour IN ? and userid = ?';
const params = [ [ 10, 20, 30] , [ 2016032117, 2016032118 ],'user_uuid' ];
client.execute(query, params, { prepare: true }, callback);

好吧,我会倒霉的。非常感谢。这很有效,世界上一切又恢复正常了。下面的人要注意一点——我无法使用映射符号来传递参数。i、 e.在上面提供的@jorgebg示例中,将参数重新定义为const params={level:[10,20,30],hours:[2016032117],“user_uuid}不起作用-在数组中使用位置值非常有效。但是,如果我的查询是const query='SELECT*FROM events.by_hour WHERE level,hour in;我的情妇应该是什么?谢谢