2016-06-06 4 views
0

Dies ist die DokumentstrukturWie für Dokumente, die Objekte mit bestimmten Werten in einem verschachtelten Array

{ 
    someProp: 'string value', 
    options:{ 
     environment: [{value: 'Gym'}, {value:'Water'}, {value: 'Home', label:'other string'}] 
    } 
} 

ich alle Dokumente filtern, muß zu suchen, wo options.environment{value: 'Gym'} und {value: 'Water'} enthält.

Was ist der beste Weg, um diese Abfrage zu machen mit mongodb Aggregat $match oder eine andere Strategie ($unwind/$group, $map)?

Antwort

1

können Sie den $all Abfrage-Operator verwenden, dies zu tun:

{ 
    "options.environment.value": { 
     "$all": ["Gym", "Water"] 
    } 
} 

Generell flachen MongoDB die Struktur vor einer Abfrage ausgeführt wird. In Ihrem Fall, das bedeutet, dass Sie effektiv ein Dokument suchen wie folgt geformt:

{ 
    "someProp": "string value", 
    "options": { 
     "environment": { 
      "value": ["Gym", "Water", "Home"], 
      "label": ["other string"] 
     } 
    } 
} 

Wenn Sie das entgegengesetzte Verhalten möchten, dann können Sie die $elemMatch Abfrage-Operator verwenden.

Keine davon ist spezifisch für das Aggregationsframework. Sie können also einen regulären Suchvorgang verwenden, wenn Sie keine anderen Aggregation Framework-Features benötigen.

Verwandte Themen