2016-04-10 6 views
1

Ich habe eine Cloudant Dokumente, die diese spezifische Struktur enthält ein JSON-Array der Kategorie, die Array von Unterkategorien enthält, und ich versuche, eine Cloudant Abfrage schreiben, die Dokumente mit bestimmten Kategorie_ID (zum Beispiel 128) mein Problem, dass es ein Array ist. zum Beispiel:Cloudant Selektor Abfragearray Feld

"category": { 
    "sub_category": [ 
     { 
     "name": { 
      "en": "Fast food" 
     }, 
     "category_id": "127" 
     }, 
     { 
     "name": { 
      "en": "Resturans" 
     }, 
     "category_id": "128" 
     } 
    ], 
} 

Bisher habe ich versucht, diesen Index zu schreiben:

{ 
    "index": {}, 
    "type": "text" 
} 

indizieren alles und einen Selektor:

{"category.sub_category":{"$elemMatch" : {"category_id": {"$gt": 128" }}} 

aber es funktioniert nicht. irgendeine Hilfe?

Antwort

1

Es sieht so aus, als ob Sie category_id als String speichern, aber dann versuchen, einen numerischen Vergleich durchzuführen. Wenn Sie Ihre Category_ids auf ganze Zahlen ändern:

"category_id": 127 
... 
"category_id": 128 

dann sollte dieser Selektor arbeiten:

"category.sub_category": { 
    "$elemMatch" : { 
     "category_id": {"$gt": 126 } 
    } 
} 

Hinweis: ich den Wert in der Abfrage 126 geändert, weil Ihre Abtastwerte 127 waren und 128 und würde nicht Übergeben Sie die ursprüngliche Abfrage (> 128).

Alternativ, wenn Sie wollte als String halten category_id und Sie wollten alle Dokumente finden, wo die category_id gleich „128“, dann können Sie den folgenden Selektor:

"_id": { "$gt": null }, 
"category.sub_category": { 
    "$elemMatch" : { 
     "category_id": {"$eq": "128" } 
    } 
}