我有几个可以标记的对象,因此模型是
type Content = {
...
tags : list(int)
...
}
如何避免从MongoDB加载所有记录以检查内容是否被给定列表中的所有标记(AND逻辑)标记?或列在给定列表的一个标签(OR逻辑)?
我已经尝试将字符串中的列表展平以使用正则表达式,但我也会卡在那里,因为您可以看到 here
我正在使用这个版本的opa(我暂时坚持使用它)
OPA version 0.9.2
(c) 2007-2012 MLstate, All Rights Reserved.
Build: 1815-(fe5cc09)
答案 0 :(得分:1)
您可以使用以下列表l
查找包含任何标记的文档:
/db/coll[tags[_] in l]
参考外观here。
对于" AND逻辑"它更复杂。 MongoDB有$all
operator,但似乎没有在Opa中实现(至少没有记录):(
您可以运行Mongo JSON查询
{ tags: { $all: [ 1, 2, 3 ] } }
low level MongoDB support。或者,您可以多次询问标签:
/db/coll[tags[_] == frst and tags[_] == scnd and tags[_] == next];
但Opa不支持动态构建数据库查询,因此您必须先了解列表的长度(编写代码时)。
答案 1 :(得分:0)
可能使用孔表达式[_],类似
/ db / path / to / content [tags [_] ==" value"]