如何使用gocql获取查询返回的行数

时间:2016-06-13 23:52:42

标签: go cassandra gocql

我正在使用这里记录的gocql库:https://godoc.org/github.com/relops/cqlc/cqlc#Fetchable我正在尝试在golang中编写一个API调用,它将要求我的数据库中满足特定字段的所有元素并返回总数返回的元素。我知道当我在Cassandra界面时,我可以使用调用SELECT COUNT(*) from table1 WHERE ...;,其中table1是表名。我一直在阅读文档,我能找到的是限制功能,它限制了返回的条目数。

例如,假设我在Cassandra有一个不同日期的事件数据库表。我只想返回星期二发生的事件数量,我想用gocql来做这件事。

目前我做的事情如下:

cx := cqlc.NewContext()
iter, err := cx.Select().
            From(db.EVENTLOG).
            Where(db.EVENTLOG.DAY.Eq(day).
            Limit(10000).       
            Fetch(cass)
data, err = db.BindEventlog(iter)

BindEventLog函数返回“day”发生的事件数组,但是我只想要事件的数量,而不是事件本身。有没有办法在没有遍历这个数组的情况下得到这个,因为我总是要抛出数组,所以让数据库给我整个数据数组真的很慢。

我是初学者,所以如果你需要更多信息请问,我试着尽可能具体。感谢。

3 个答案:

答案 0 :(得分:1)

我能找到的最接近的东西是Iter.NumRows

如果他们对不会为您提供所需内容的行进行分页。如果他们这样做,这是一个合理的功能,要求他们的Github。

答案 1 :(得分:1)

我希望:

var count int
tc.Session.Query(`SELECT COUNT(*) FROM ks.tbl WHERE something = ? ALLOW FILTERING`, "something_else").Iter().Scan(&count)
print(count)

因为计数将由数据库本身而不是应用程序执行。灵魂的答案也可以,但是我更喜欢将计数保存为整数,并直接进行扫描,但不进行附加循环

答案 2 :(得分:0)

您可以这样做

var count string
iter := session.Query(`SELECT count(*) FROM tablename`).Iter()
for iter.Scan(&count) {
    print(count)
}

您将获得count变量中的count。