2016-04-10 16 views
1

Bu özel yapıyı içeren bir kategori belgelerini, alt kategori dizisini içeren bir kategori json dizisi, ve verilen category_id ile belgeleri döndüren bir cloudant sorgusu yazmaya çalışıyorum (örneğin; 128) Benim sorunum bir dizi. örneğin : şeyi dizine ve bir seçicininCloudant seçici sorgu dizisi alanı

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

:

"category": { 
    "sub_category": [ 
     { 
     "name": { 
      "en": "Fast food" 
     }, 
     "category_id": "127" 
     }, 
     { 
     "name": { 
      "en": "Resturans" 
     }, 
     "category_id": "128" 
     } 
    ], 
} 
şimdiye kadar ben bu dizini yazmaya çalıştık

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

ama çalışmıyor. herhangi bir yardım?

cevap

1

Category_id öğesini bir dize olarak depoladığınız halde sayısal bir karşılaştırma yapmaya çalıştığınız anlaşılıyor. Eğer tamsayılar için category_ids değiştirirseniz:

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

sonra bu selektör çalışması gerekir:

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

Not: Ben senin örnek değerler 127 ve 128 oldukları için 126'ya kadar sorguda değer değişti ve olmaz Orijinal sorguyu iletin (> 128).

Alternatif olarak, bir dize olarak category_id tutmak istedim ve category_id "128" ise aşağıdaki seçiciyi kullanabilirsiniz eşittir tüm belgeleri bulmak istiyorsa:

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