【问题标题】:How to query cassandra UDT using gocql?如何使用 gocql 查询 cassandra UDT?
【发布时间】:2020-10-06 18:59:21
【问题描述】:

Cassandra 表和 UDT

CREATE TYPE IF NOT EXISTS phone_type(
   code TEXT,
   phone TEXT,
);

CREATE TABLE IF NOT EXISTS user_by_phone(
    user_id UUID,
    phone FROZEN<phone_type>,
    password TEXT,
    PRIMARY KEY (phone)
);

golang 结构

type PhoneType struct {
    Code  string `json:"code"`
    Phone string `json:"phone"`
}
phone := PhoneType{
    Code:  "+1",
    Phone: "7777777777",
}

gqcql查询

err := Session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Scan(
    &user.UserID,
    &user.Password,
)

使用此代码,即使在 cassandra 表中有记录,它也会返回 not found。 gocql如何通过UDT查询?

【问题讨论】:

    标签: go cassandra gocql


    【解决方案1】:

    尝试像这样定义你的结构(在你的结构定义中使用cql而不是json

    type PhoneType struct {
        Code  string `cql:"code"`
        Phone string `cql:"phone"`
    }
    
    phone := PhoneType{
        Code:  "+1",
        Phone: "7777777777",
    }
    

    根据此处的示例: https://github.com/gocql/gocql/blob/master/udt_test.go

    这对我有用:

        var id gocql.UUID
        var password string
        
        iter := session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Iter()
        for iter.Scan(&id, &password) {
            fmt.Println("Phone Record:", id, password)
        }
        if err := iter.Close(); err != nil {
            log.Fatal(err)
        }
    

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 2019-02-03
      • 2015-09-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2019-12-07
      • 2019-02-15
      • 2018-08-23
      相关资源
      最近更新 更多