我在一个对象上有一系列标记,我想查询包含作为数组传递的所有标记的对象。我知道运算符in和inList在MongoDB中转换为$ in运算符,但$ in将返回包含至少一个提供的标记的任何对象。我想要包含所有提供的标签的对象。或者说另一种方式$ in表示使用t1,t2或t3等查找所有标签。我想使用t1和t2和t3等查找所有标签.Mongodb幸运地支持$ all运算符。
那么如何从Grail的GORM MongoDB插件执行查询,该插件将使用$ all运算符?我必须使用低级API吗?如果是这样,我如何让低级API返回完全填充的Domain对象?
或者是否有更好的查询选项,而不是使用性能更好的$ all运算符,让我保持在GORM的标准查询范围内?
答案 0 :(得分:1)
好的,我觉得我几乎每隔几周就会这样做,但是我在这里记录了MongoDB GORM,因为作者认为它并不重要。
所以$ all不受支持。另一种查询如下:
Photo.findAll {
and {
tagList.each { tag ->
eq( 'tags', tag )
}
}
}
你不能使用==,但我没有解释。我想我记得读过关于每个封闭干扰的东西,但是我找不到它或者记得我在哪里看到它。无论如何你必须使用eq()方法。