2 Stimmen

Wie kann man eine Sammlung von eingebetteten Mongo-Dokumenten abfragen, um ein bestimmtes Dokument mit einer Liste von Kriterien zu extrahieren?

Ich versuche, eine Sammlung von Dokumenten auf der Grundlage des Inhalts ihrer eingebetteten Dokumente auszuwählen.

Mein Modell sieht folgendermaßen aus:

class box
  embeds_many :items
  field :stuff
end

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

So mit dieser Struktur kann ich mit der folgenden Abfrage eine Sammlung von Boxen Basen auf es ist Element Attribute zu extrahieren:

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

So diese Abfrage gibt mir eine Sammlung von Feld, das Elemente mit Attributen 1 = x und Attribute 2 = y und Array, die value1 oder value2 enthält

Das ist alles großartig, aber das Problem ist, dass ich alle Attribute in einem Punkt zusammenfassen muss. Was ich meine, ist, dass diese Abfrage mich Box wie diese zurückgeben wird:

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

Die Kriterien der Abfrage werden eingehalten, denn es stimmt zwar, dass Attribut1 = "x" und Attribut2 = "y" in diesem Feld ist, aber leider nicht innerhalb desselben Elements.

Das ist es, was ich brauche, die Liste der Felder enthält Elemente, die alle gewünschten Werte innerhalb desselben Elements haben.

Wie kann ich das tun? Ich habe einfach keine Ahnung? Ich hoffe, ich habe mich klar ausgedrückt, ich war mir nicht ganz sicher, wie ich mein Problem erklären sollte.

Danke,

Alex

0voto

Alex Punkte 4187

Ich habe hier einen Anfang einer Antwort gefunden:

http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reichweite+in+Objekte%29#PunktNotation%28Reichweite+in+Objekte%29-Matchingmit%24elemMatch

Jetzt muss ich herausfinden, wie ich das in Mongoid machen kann...

Alex

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X