2013-05-13 14 views
6

tài liệu của tôi có cấu trúc sau:

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

Trong vỏ Mongo, tôi có thể sử dụng truy vấn sau đây để tìm tài liệu trong đó có một số điểm mà tiêu đề là 'môi trường' và giá trị lớn hơn 2.

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

Bây giờ tôi muốn truy vấn các tài liệu sử dụng nha phiến, từ doc api, các nhà điều hành 'elem' được hỗ trợ trong phương pháp fiter, và một truy vấn thêm đối tượng tiêu chí là bắt buộc, ví dụ: truy vấn cho tài liệu có điểm số có tiêu đề là "môi trường" và mô tả là "tốt":

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); 

Câu hỏi của tôi là: Làm thế nào tôi có thể làm một so sánh số trong các tiêu chuẩn truy vấn, mà là để nói, làm thế nào tôi có thể làm cho một truy vấn mà có tác dụng tương tự như đối tác vỏ mongo.

Trả lời

1

Tôi đoán bạn có thể thử

ds.createQuery(Review.class). 
    filter("scores.scoreValue >=", 2). 
    filter("scores.scoreTitle", "environment"). 
    retrievedFields(true, "scores.$") 
Các vấn đề liên quan