2017-05-10 3 views
2

Mein Dokument hat eine Struktur wie folgt aus:Mango Suche in Arrays (CouchDB)

{ 
    "Calibration": { 
    "Presettings": { 
     "Date": [ 
     { 
      "Value": "2016-09-02 10:11", 
      "Type": "generated" 
     }, 
     { 
      "Value": "2016-09-05", 
      "Type": "schedule", 
      "Duration": "5" 
     } 
     ] 
    } 
    } 
} 

Wie muss ich den Wahl Teil eines Abfrageobjekt definieren alle Dokumente mit Daten (Wert) zu erhalten weniger oder gleich ein gegebenes Datum und mit Type=='generated'?

Antwort

4

Zuerst müssen Sie Ihren Index erstellen. Ich schlage vor, dass Sie einen Index auf dem Calibration.Presettings.Date field erstellen.

Sie können die folgenden JSON-Objekt verwenden, um es zu schaffen:

{ 
    "index": { 
    "fields": [ 
     "_id", 
     "Calibration.Presettings.Date.[].Type" 
    ] 
    }, 
    "type": "json" 
} 

So der Wähler so sein würde:

{ 
    "selector": { 
    "Calibration.Presettings.Date": { 
     "$elemMatch": { 
     "$and": [ 
      { 
      "Type": "generated" 
      }, 
      { 
      "Value": { 
       "$gte": "2016-09-01" 
      } 
      } 
     ] 
     } 
    } 
    } 
} 

Wir führen die Abfrage auf dem Feld Calibration.Pressettings.Date Das ist ein Array. Da es sich um ein Array handelt, müssen wir den Operator $ elemMatch verwenden.

Dann haben wir eine $ und Bedingung für den Wert und den Typ.

Der Typ des Datum erzeugt werden muss. Mit können Sie entweder den Operator $ eq verwenden oder einfach diese einfache Syntax verwenden: {"field":"value"}.

Schließlich muss der Wert des Datums größer oder gleich X Datum sein. Wir können den Operator $ gte verwenden.

+0

Vielen Dank. Das hilft und ich verstehe viel mehr als vorher. – rolfn

+0

Bitte akzeptieren Sie diese Antwort, wenn es Ihnen geholfen hat. Es kann anderen in der Zukunft helfen –