Как выполнить этот запрос в консоли Mongo и Mongoid? - PullRequest
4 голосов
/ 31 марта 2011

Я пытаюсь научиться обращаться к 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 находится в массиве альтернативных имен .

Но я не могу найти правильный синтаксис ни в клиенте, ни в mongoid

Любой из них (или оба) будут высоко оценены.

Спасибо

1 Ответ

5 голосов
/ 31 марта 2011

Я думаю, что вы ищете ключевое слово $elemMatch:

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

В настоящее время Mongoid не имеет помощника для $elemMatch, поэтому вы должны передать необработанный запрос:

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

Более подробная информация здесь $elemMatch здесь:

Подробнее о поддержке Mongoid для$elemMatch здесь:

...