问题描述
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表中有记录,也不会返回。 如何使用gocql通过UDT查询?
解决方法
尝试这样定义您的结构(在结构定义中使用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)
}