我正在尝试学习如何以更高级的方式查询Mongo。假设我的数据结构如下:
{ "_id" : "-bcktick-ajman-ae-292932", "asciiname" : "`Ajman",
"alternatenames" : [
{
"isolanguage" : "no",
"alternateNameId" : 2698358,
"alternateName" : "Ajman"
},
{
"isolanguage" : "en",
"alternateNameId" : 2698357,
"alternateName" : "Ajman"
}
]
}
所以要轻松找到 Ajman
:
db.cities.find({ "asciiname":"`Ajman" })
但是,我想找到只有isolanguage
en 的城市。您会注意到isolanguage
位于 alternatenames 数组中。
但我似乎无法在客户端或 mongoid中找到正确的语法
任何一方(或两方)都会受到高度赞赏。
由于
答案 0 :(得分:5)
我认为您正在寻找$elemMatch
关键字:
db.cities.find(
{ 'alternatenames' : {
$elemMatch: { isolanguage: 'en'}
}
})
目前,Mongoid没有$elemMatch
的助手,所以你必须传入原始查询:
City.where({ :alternatenames => { '$elemMatch' => { :isolanguage => 'en' } } })
此处$elemMatch
更多信息:
此处有关$elemMatch
的Mongoid支持的更多信息: