检查数组字段mongoid rails中是否存在值

时间:2015-03-28 10:06:24

标签: ruby-on-rails mongodb mongoid

我在mongodb数据库中有一个groups字段

"groups" : "[\"5514efcc6970640f40150100\", \"5514efcc6970640f40160100\", \"5514efcc6970640f40170100\", \"5514efcc6970640f40180100\"]

请建议查询以检查上述数据库数组中是否存在字段。

喜欢modelname.find(:groups=> 5514efcc6970640f40150100)

1 个答案:

答案 0 :(得分:0)

看起来你实际上在groups中有一个字符串,而不是一个数组。该字符串看起来像是在Ruby中的BSON ObjectIds数组上调用了inspect,并将该字符串化数组存储在MongoDB中。

这里的双引号:

           ⬇
"groups" : "[\"5514efcc6970640f40150100\", ...
           ⬆

告诉你你有一个字符串。在该字符串中,你看起来像一个字符串数组,但它仍然是一个字符串。

如果那真的是你所拥有的那么我认为你会坚持使用正则表达式搜索(这会很慢),例如:

Model.where(:groups => /"5514efcc6970640f40150100"/)

假设所有groups字符串始终形成,并且它们实际上是十六进制字符串的字符串化数组。

如果是这种情况,那么我建议您立即修复数据库和代码,以便在groups中使用真实数组。


如果您的groups确实是一个十六进制字符串数组,如:

"groups" : ["5514efcc6970640f40150100", ...

然后你可以像标量字段一样查询它,让MongoDB为你解开数组:

Model.where(:groups => '5514efcc6970640f40150100')