2017-07-27 2 views
0

Wie kann ich (mit Node.js und MongoDB durch Mongoose) nach vielen Elementen in einem Array im Dokument suchen.Node.js - Mungo: Suche nach mehreren Elementen im Array in Dokumenten

Zum Beispiel, wenn ich Dokumente wie:

{ 
    _id: 123, field1: 'abc', field2: ['def', 'ghi', 'jkl'], 
    _id: 456, filed1: 'abc', filed2: ['jkl', 'ghi', 'def'] 
} 

Und das Schema wird schema1 genannt, wie kann ich eine Suche mit einer Abfrage wie

{field1: 'abc', field2: ['def', 'jkl']} 

durchführen und beiden Dokumente erhalten (alle Dokumente, deren field1 = 'abc' und field2 beide 2 Elemente im Array in Query enthält)?

Ich versuchte mit schema1.find(), aber es entspricht nur die Arrays als Ganzes nicht ihre Elemente. Keines dieser 2 Dokumente würde also zurückkehren.

Antwort

1

Sie können die $ alle Betreiber mit der folgenden Abfrage verwenden:

{ 
    field1: 'abc', 
    field2: { 
     $all: ['def', 'jkl'] 
    } 
} 
+0

Jetzt weiß ich, warum versuchen $ alles hat nicht funktioniert für mich vorher = D. Vielen Dank @Steve – TamerB

+0

Kein Problem. Froh, dass ich helfen konnte. –

1

Als ich lief in das gleiche Problem war meine Lösung etwas dies zu tun:

{field1: 'abc', field2: 'def', field2:'jkl'}

Dies sollte alle Dokumente, die zumindest haben beide ‚def‘ und ‚jkl‘ innerhalb field2 und ‚abc 'in field1. Es sieht ein bisschen peinlich aus und es gibt möglicherweise eine bessere Möglichkeit, diese Abfrage zu schreiben, aber es funktioniert und ist absolut gültig.

0

Ergebnisse

verwenden

holen Sie $ und für verbinden beide Bedingung verwenden können und in

Element in Array verwenden $ suchen

db.collectionName.find ({$ und: [{"field1": "abc"}, {"field2": {$ in: ["def", "jkl"]}}})).)