2013-05-13 25 views
6

Mój dokument ma następującą strukturę:

{ 
"scores": [{ 
    "scoreTitle": "environment", 
    "scoreValue": 3, 
    "scoreDescribe": "good" 
}, { 
    "scoreTitle": "service", 
    "scoreValue": 3, 
    "scoreDescribe": "good" 
}, { 
    "scoreTitle": "taste", 
    "scoreValue": 4, 
    "scoreDescribe": "good" 
}] 
} 

W Mongo powłoki, można użyć następującej kwerendy, aby znaleźć dokument, który ma wynik, którego tytuł jest „środowisko” i wartość jest większa niż 2.

db.reviews.find({"scores":{"$elemMatch":{"scoreValue":{"$gt":2},"scoreTitle":"environment"}}}) 

teraz chcę kwerendy dokumentu za morfinę, z doc api, operator „elem” jest obsługiwana w metodzie fiter, a dodatkowe zapytania obiekt kryterium jest wymagany, na przykład zapytanie o dokument zawierający wynik, którego tytuł jest „środowisko” i opisać to „dobre”:

Score score = new Score();// the criteria object, only support comparisons of equality 
score.setScoreTitle("environment"); // title should be environment 
score.setScoreDescribe("good"); // describe should be good 
Query q = ds.createQuery(Review.class).filter("scores elem", score); 

Moje pytanie brzmi: Jak mogę dokonać porównania numerycznego w kryteriach zapytania, to znaczy, w jaki sposób mogę zrobić kwerendę, która ma taki sam efekt jako odpowiednik powłoki mongo.

Odpowiedz

1

Myślę, że można spróbować

ds.createQuery(Review.class). 
    filter("scores.scoreValue >=", 2). 
    filter("scores.scoreTitle", "environment"). 
    retrievedFields(true, "scores.$")