0

如何在集合中搜索 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()
4

1 回答 1

0

可悲的是,因为在 Cassandra 中,引擎是基于“地图样式”索引的,所以NOT运算符本身并不是一个合适的概念。可以说它可以通过诸如分区键命中的键缓存之类的东西公开,但对于二级索引之类的东西,它们可能不是技术现实。

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

为了实现你想要的,基于基数你有两种方法,你要么使用二级索引和一个普通的,CONTAIN要么你去规范化并存储在一个单独的表中,这可能会提高性能,但它仍然需要“差异”。

于 2016-12-12T00:43:08.940 回答