Mongoid查询数组字段

mru*_*ult 14 ruby-on-rails mongoid

我有一个Mongoid 的category领域type Array.

防爆.类别:["val1","val2","val3"]

现在我想用`category:["val1","val2"]查询这个模型,这样它就会返回我的合并

Model.where(类别:"val1")和Model.where(类别:"val2")

我可以为数组的每个元素单独执行,但这会很慢,因为对于每个单独的元素,它将搜索所有文档.

我也尝试过Model.all_of({category: "val1"},{category: "val2"}).all但是没有用.

我该怎么做?

小智 28

在mongoid中,有'$ in'运算符.所以你可以这样做:

Model.where(category: { '$in': ['val1', 'val2'] })
Run Code Online (Sandbox Code Playgroud)

  • @AhmedFathy:或者只是说`Model.where(:category.in => ['val1','val2'])`.Mongoid为其他MongoDB运算符添加类似于Symbol的方法:`:f.ne => ...`,`:f.gt => ...`,... (8认同)
  • 这给了我一个语法错误.我不得不使用:Model.where(类别:{'$ in'=> ['val1','val2']})注意使用'=>'而不是':' (3认同)

bor*_*gvo 11

您可以使用Criteria all_in使其更简单:

Model.all_in(category: ['val1','val2'])
Run Code Online (Sandbox Code Playgroud)


Mag*_*led 7

这很有效

Model.where(:category.in => ['val1','val2'])
Run Code Online (Sandbox Code Playgroud)

来自Mongo Docs