如何使用gocql查询cassandra udt?

dw1jzc5e  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(440)

Cassandra表和udt

  1. CREATE TYPE IF NOT EXISTS phone_type(
  2. code TEXT,
  3. phone TEXT,
  4. );
  5. CREATE TABLE IF NOT EXISTS user_by_phone(
  6. user_id UUID,
  7. phone FROZEN<phone_type>,
  8. password TEXT,
  9. PRIMARY KEY (phone)
  10. );

golang构造

  1. type PhoneType struct {
  2. Code string `json:"code"`
  3. Phone string `json:"phone"`
  4. }
  5. phone := PhoneType{
  6. Code: "+1",
  7. Phone: "7777777777",
  8. }

gqcql查询

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

在cassandra表中有记录时,使用此代码返回not found event。如何使用gocql进行udt查询?

13z8s7eq

13z8s7eq1#

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

  1. type PhoneType struct {
  2. Code string `cql:"code"`
  3. Phone string `cql:"phone"`
  4. }
  5. phone := PhoneType{
  6. Code: "+1",
  7. Phone: "7777777777",
  8. }

举个例子:https://github.com/gocql/gocql/blob/master/udt_test.go
这对我很有用:

  1. var id gocql.UUID
  2. var password string
  3. iter := session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Iter()
  4. for iter.Scan(&id, &password) {
  5. fmt.Println("Phone Record:", id, password)
  6. }
  7. if err := iter.Close(); err != nil {
  8. log.Fatal(err)
  9. }
展开查看全部

相关问题