Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 Mongoid从文档中的数组返回特定对象_Ruby On Rails_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails Mongoid从文档中的数组返回特定对象

Ruby on rails Mongoid从文档中的数组返回特定对象,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,这似乎应该很简单,但我已经为此奋斗了一段时间,没有运气 假设我有一个简单的文档,如下所示: { data: [ { name: "Minnesota", }, { name: "Mississippi", }, ... ] } 如果我在Mongo Shell中运行以下查询,一切都会按照我的预期运行: db.collection.find({}, {data: {$elemMatch: {name: "Michigan"}}

这似乎应该很简单,但我已经为此奋斗了一段时间,没有运气

假设我有一个简单的文档,如下所示:

{
  data: [
    {
      name: "Minnesota",
    },
    {
      name: "Mississippi",
    },
    ...
  ]
}
如果我在Mongo Shell中运行以下查询,一切都会按照我的预期运行:

db.collection.find({}, {data: {$elemMatch: {name: "Michigan"}}})
返回:

{ "_id" : ObjectId("5e9ba60998d1ff88be83fffe"), "data" : [ { "name" : "Michigan" } ] }
但是,使用
mongoid
,尝试运行类似的查询将返回数据数组中的每个对象。以下是我尝试过的其中一个问题:

Model.where({data: {"$elemMatch": {name: "Michigan"}}}).first
如上所述,这个小查询返回数据数组中的所有内容,而不是我试图从文档中提取的特定对象

任何帮助都将不胜感激。我试图避免返回结果并用Ruby进行后处理。我想在DB级别处理这个问题


多谢各位

之前有一个非常类似的问题,针对不同的驾驶员。显然,ruby驱动程序的行为与shell不同

尝试以等效数据库命令的形式运行查找:

session.command({'find' => 'my_collection', 'filter' => {}, projection => {data: {$elemMatch: {name: "Michigan"}}}})

投影的Mongoid语法是。

第一个示例在投影中执行
$elemMatch
,而第二个示例将其作为过滤器的一部分。你的
Model.where()
必须能够控制投影吗?我不想在我的问题上太罗嗦,但是,是的,我甚至试过以下方法:
db=Mongoid.default\u client.database
collection=db[:collection]
collection.find({},{data:{$elemMatch:{name:{Michigan}}}})
-不走运。谢谢你的回复。太棒了。工作起来很有魅力!非常感谢。