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}}}})
-不走运。谢谢你的回复。太棒了。工作起来很有魅力!非常感谢。