MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb-Array-Abgleich

Interessant ... Das Problem ist ... die Operatoren $in und $or werden auf die Elemente des Arrays angewendet, mit denen Sie vergleichen jedes Dokument in der Sammlung, nicht auf die Elemente der Arrays in den Dokumenten. Um Ihre Frage zusammenzufassen:Sie möchten, dass es eine Übereinstimmung gibt, wenn eines der Dokumente in der Sammlung zufällig eine Teilmenge des übergebenen Arrays. Ich kann mir keine Möglichkeit vorstellen, dies zu tun, es sei denn, Sie tauschen Ihre Ein- und Ausgabe. Was ich meine ist ... Nehmen wir Ihre erste Eingabe:

db.test.find( {a: [1,2,3,4]} );

Erwägen Sie, dies in einer temporären Sammlung zu speichern, z. B. temp als:

db.temp.save( {a: [1,2,3,4]} );

Iterieren Sie nun jedes Dokument in der Testsammlung und „finden“ Sie es in temp, mit dem $all-Operator, um sicherzustellen, dass es vollständig enthalten ist, d. h. tun Sie so etwas:

foreach(doc in test)
{ db.temp.find( { a: { $all: doc.a } } ); }


Dies ist definitiv ein Workaround! Ich bin mir nicht sicher, ob ich einen anderen Bediener vermisse, der diesen Job erledigen kann.