在intmap集合中搜索特定属性(不使用map索引)

时间:2013-09-05 09:39:08

标签: mongodb opa

我的问题是(再次)关于OPA数据库高级API。

我声明了以下数据模型:

database click = @mongo
db /click/click : intmap(Scan.scan)

这是Scan.scan类型:

type Scan.scan = {
  user : int
  qr : int
  date : Date.date
}

我的问题是我需要在数据库中查询给定“qr”属性的具体“点击”,但是使用intmap这一事实迫使我检索所有点击,然后手动搜索整个列表与给定的“qr”参数匹配。

我实际上在做的是通过/click/click获取所有点击,然后在其上应用List.filter ....但我遇到了性能问题(我感觉我正在做MongoDB的工作)

所以我的问题很简单: 我是否遗漏了OPA数据库高级API的内容,或者我是否需要在我的点击集合上进行数据迁移,因为我无法检索未存储在其他任何地方的intmap索引值。

我希望我的问题足够明确。 谢谢你的回复。

1 个答案:

答案 0 :(得分:1)

在这种情况下我通常做的是构建另一个索引,例如

db /click/by_qr : intmap(Scan.scan)

db /click/by_qr : intmap(int) // int represents user id

当然,这意味着您必须小心维护索引。我的理解是最终会有更好的方法来解决这个问题,但现在你必须手动完成;我同意这不是一个非常好的解决方案。