Как запросить коллекцию встроенных документов mongo для извлечения определенного документа со списком критериев?

#ruby-on-rails-3 #collections #mongodb #mongoid

#ruby-on-rails-3 #Коллекции #mongodb #mongoid

Вопрос:

Я пытаюсь выбрать коллекцию документов на основе содержимого их встроенных документов.

Моя модель выглядит следующим образом:

 class box
  embeds_many :items
  field :stuff
end

class item
  field :attrib1
  field :attrib2
  field :array
end
  

Итак, с помощью этой структуры я могу запросить следующее, чтобы извлечь коллекцию ящиков, основанную на атрибутах этого элемента:

 Box.any_in(:'items.array' => [:value1, :value2]).where(:'items.attrib1'=> 'x', :'items.attrib2' => 'y').order_by([:stuff, :asc])
  

Итак, этот запрос выдает мне коллекцию box, содержащую элементы с атрибутами 1 = x и атрибутами 2 = y, и массив, содержащий значение1 или значение2

Это все замечательно, но проблема в том, что мне нужно связать все атрибуты в один элемент. Я имею в виду, что этот запрос вернет мне поле, подобное этому:

  box
 {
    items
    [
       {array => [value1], attrib1 => "x", attrib2 => "z"}
       {array => [value1], attrib1 => "h", attrib2 => "y"}           
    ]
 }
  

Критерии запроса соблюдаются, потому что верно, что attrib1 = ‘x’ и attrib2 = ‘y’ в этом поле, но, к сожалению, не в пределах одного элемента.

Это то, что мне нужно, список ящиков содержит элементы, которые имеют все требуемые значения в пределах одного элемента.

Как я могу это сделать? Я просто понятия не имею? Надеюсь, я ясно выразился, я не был уверен, как объяснить мою проблему

Спасибо,

Алекс

Комментарии:

1. Повторно помечено. Это не вопрос встроенного программного обеспечения — смотрите tag wiki для получения дополнительных разъяснений.

Ответ №1:

Я нашел начало ответа здесь:

http://www.mongodb.org/display/DOCS/Dot Notation (Reaching into Objects)#DotNotation(ReachingintoObjects)-Matchingwith$elemMatch

Теперь мне нужно выяснить, как это сделать в mongoid…

Алекс