Ruby on rails 为什么elem_match返回0个元素?
我试图从一个对象集合中获得一个记录结果,但是在遵循Mongoid文档之后,我不知道还有什么可以尝试 我有一个元素:Ruby on rails 为什么elem_match返回0个元素?,ruby-on-rails,mongoid,Ruby On Rails,Mongoid,我试图从一个对象集合中获得一个记录结果,但是在遵循Mongoid文档之后,我不知道还有什么可以尝试 我有一个元素: > contacts => #<Contact _id: 55ace6bc6xx, device_fields: {"app_id"=>"55ace6bc65195efc8200xxxx"}, created_at: 2015-07-20 12:17:00 UTC, updated_at: 2015-07-20 12:17:00 UTC, na
> contacts
=> #<Contact _id: 55ace6bc6xx, device_fields: {"app_id"=>"55ace6bc65195efc8200xxxx"}, created_at: 2015-07-20 12:17:00
UTC, updated_at: 2015-07-20 12:17:00 UTC, name_first: "Kory",
name_last: "Funk", ...>
如果有一个匹配的数组,为什么它会返回一个空数组?我无法用
match\u elem
方法解决这个问题,所以最后我决定通过和来实现。我对这个解决方案不是很满意,我仍然不明白为什么match\u elem
不返回记录,但至少我找到了一个解决方案来取消阻止此功能
contacts.and(:device_fields.exists => true,
:device_fields.nin => ['', nil],
:"device_fields.app_id".in => apps).to_a
据官方称
$elemMatch运算符匹配包含数组字段的文档
您试图将其与哈希字段一起使用,因此基本上误解了此选择。因此没有匹配的对象
你应该做的是:
contacts.where(:'device_fields.app_id'.in => apps).to_a
这里不需要elemMatch
。它用于通过部分匹配查找对象数组元素(不需要完全对象相等,只需要一个或多个字段)
这应该适合你的情况
contacts.where('device_fields.app_id' => {'$in' => apps})
你能尝试一下contacts.elem\u match(设备字段:{“app\u id”:apps.first})吗。我试过这个和很多可能的组合。。。我找不到正确的答案。你不需要前两个条款。哦,是的!我正在将一个has\u many
关联(散列)替换为一个has\u one
,并试图重构旧的元素匹配。没错,它不再是杂凑了。现在一切似乎都清楚了。谢谢
contacts.where(:'device_fields.app_id'.in => apps).to_a
contacts.where('device_fields.app_id' => {'$in' => apps})