首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nodejs 'cassandra-driver‘准备查询和IN查询

使用nodejs 'cassandra-driver‘准备查询和IN查询
EN

Stack Overflow用户
提问于 2016-03-22 20:16:11
回答 1查看 927关注 0票数 2

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

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

代码语言:javascript
复制
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);

我想做一个准备好的查询,以获取由给定用户在某些级别上可选地过滤的所有事件,最好是在几个小时的过程中。

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

代码语言:javascript
复制
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);
                });

这在一个小时内和水平上都很好。我希望在上面的查询中指定多个小时和级别,但通过将集合指定为字符串或值数组,我无法使用代码。

我想我不得不这样做:

根据需要的级别和小时数构建查询:

代码语言:javascript
复制
// 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);
                });

我不喜欢这个。但是,即使在这里,我仍然可以获得准备好的查询的好处,因为我们只需传递‘准备:真’。感觉应该有更好的方法..。但是,我不知道我试图做的是什么,甚至可以用一个准备好的查询。

有人能在这里学点智慧吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 09:11:52

您应该使用IN操作符,后面跟着查询标记(没有括号),并将查询标记的参数作为数组提供:

代码语言:javascript
复制
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);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36164325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档