0

我在一个对象上有一系列标签,我想查询包含作为数组传递的所有标签的对象。我知道 in 和 inList 中的运算符转换为 MongoDB 中的 $in 运算符,但 $in 将返回包含至少一个提供的标签的任何对象。我想要包含所有提供的标签的对象。或者说另一种方式 $in 意味着 findAll 带有 t1、或 t2 或 t3 等的标签。我想要带有 t1 AND t2 AND t3 等的 findAll 标签。幸运的是,Mongodb 支持 $all 运算符。

那么如何从 Grail 的 GORM MongoDB 插件中执行一个使用 $all 运算符的查询呢?我必须使用低级 API 吗?如果是这样,我如何获得较低级别的 API 以返回完全填充的域对象?

或者有没有比使用性能更好的 $all 运算符更好的查询选项,让我留在 GORM 的标准查询中?

4

1 回答 1

1

好吧,我觉得我几乎每隔几周就会这样做一次,但在这里我会记录 MongoDB GORM,因为作者只是不认为它很重要。

所以不支持 $all 。另一种查询如下:

Photo.findAll {
    and {
       tagList.each { tag ->
          eq( 'tags', tag )
       }
    }
}

您不能使用 ==,但我对此没有任何解释。我想我记得读过一些关于每个闭包干扰的东西,但我找不到它或记得我在哪里看到它。无论如何,您必须使用 eq() 方法。

于 2013-08-17T22:40:03.087 回答