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

Check if value exist into array field mongoid rails

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

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

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

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

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

这里的前导双引号:

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

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

如果这真的是你所拥有的,那么我认为你被正则表达式搜索困住了(这会很慢),比如:

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

假定所有 groups 字符串的格式一致,并且它们实际上是十六进制字符串的字符串化数组。

如果是这种情况,那么我建议您立即修复数据库和代码,以便在 groups.

中使用真正的数组

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

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

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

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