如何在Mongo控制台和Mongoid中执行此查询?

时间:2011-03-31 00:06:40

标签: mongodb mongoid

我正在尝试学习如何以更高级的方式查询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中找到正确的语法

任何一方(或两方)都会受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:5)

我认为您正在寻找$elemMatch关键字:

db.cities.find(
  { 'alternatenames' : {
       $elemMatch: { isolanguage: 'en'} 
     } 
})

目前,Mongoid没有$elemMatch的助手,所以你必须传入原始查询:

City.where({ :alternatenames => { '$elemMatch' => { :isolanguage => 'en' } } })

此处$elemMatch更多信息:

此处有关$elemMatch的Mongoid支持的更多信息: