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

cbm*_*eks 4 mongodb mongoid

我正在尝试学习如何以更高级的方式查询Mongo.假设我的数据结构如下:

{ "_id" : "-bcktick-ajman-ae-292932", "asciiname" : "`Ajman", 
    "alternatenames" : [
    {
        "isolanguage" : "no",
        "alternateNameId" : 2698358,
        "alternateName" : "Ajman"
    },
    {
        "isolanguage" : "en",
        "alternateNameId" : 2698357,
        "alternateName" : "Ajman"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

所以要找到Ajman很容易:

db.cities.find({ "asciiname":"`Ajman" })
Run Code Online (Sandbox Code Playgroud)

不过,我想找到的城市,只有拥有isolanguage连接.你会注意到isolanguagealternatenames数组中.

但我似乎无法在客户端或mongoid中找到正确的语法

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

谢谢

bow*_*ior 5

我想你正在寻找$elemMatch关键字:

db.cities.find(
  { 'alternatenames' : {
       $elemMatch: { isolanguage: 'en'} 
     } 
})
Run Code Online (Sandbox Code Playgroud)

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

City.where({ :alternatenames => { '$elemMatch' => { :isolanguage => 'en' } } })
Run Code Online (Sandbox Code Playgroud)

更多信息在$elemMatch这里:

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