Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么elem_match返回0个元素?_Ruby On Rails_Mongoid - Fatal编程技术网

Ruby on rails 为什么elem_match返回0个元素?

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

我试图从一个对象集合中获得一个记录结果,但是在遵循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, 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})