查询 SetColumn

Query a SetColumn

如何在集合中搜索 NOT CONTAINS? 假设我有以下模型:

case class ClassRoom(id:String, age:Int, name:String , kids: Set[String])
abstract class PersonModel extends CassandraTable[PersonModel, Person] {
  override def tableName = "ClassRooms"
  object id extends StringColumn(this) with PartitionKey[String]
  object age extends DoubleColumn(this) with PrimaryKey[Double]
  object kids extends SetColumn[String](this)

我要进行以下查询

def findMissing(minAge:Double, kid:String) = select 
.where(_.age > age)
.and (_.kids not contain kid)
.fetch()

遗憾的是,因为在 Cassandra 中引擎是基于 "map style" 索引的,所以 NOT 运算符并不是一个固有的 suitable 概念。可以说它可以通过分区键命中的键缓存之类的东西暴露出来,但对于二级索引之类的东西,它们可能不是技术现实。

首先,您需要 object kids extends SetColumn[String](this) with Index[Set[String]] 才能正常工作 contains,因此我提到了二级索引。

为了实现你想要的,基于基数你有两种方法,你要么使用二级索引和一个普通的CONTAIN,要么你去规范化并存储在一个单独的table,这可能提高性能,但仍需要 "diffing".