我在mongodb数据库中有一个groups字段
"groups" : "[\"5514efcc6970640f40150100\", \"5514efcc6970640f40160100\", \"5514efcc6970640f40170100\", \"5514efcc6970640f40180100\"]
请建议查询以检查上述数据库数组中是否存在字段。
喜欢modelname.find(:groups=> 5514efcc6970640f40150100)
答案 0 :(得分:0)
看起来你实际上在groups
中有一个字符串,而不是一个数组。该字符串看起来像是在Ruby中的BSON ObjectIds数组上调用了inspect
,并将该字符串化数组存储在MongoDB中。
这里的双引号:
⬇
"groups" : "[\"5514efcc6970640f40150100\", ...
⬆
告诉你你有一个字符串。在该字符串中,你看起来像一个字符串数组,但它仍然是一个字符串。
如果那真的是你所拥有的那么我认为你会坚持使用正则表达式搜索(这会很慢),例如:
Model.where(:groups => /"5514efcc6970640f40150100"/)
假设所有groups
字符串始终形成,并且它们实际上是十六进制字符串的字符串化数组。
如果是这种情况,那么我建议您立即修复数据库和代码,以便在groups
中使用真实数组。
如果您的groups
确实是一个十六进制字符串数组,如:
"groups" : ["5514efcc6970640f40150100", ...
然后你可以像标量字段一样查询它,让MongoDB为你解开数组:
Model.where(:groups => '5514efcc6970640f40150100')