2016-06-01 4 views
0

Я использую следующий код для фильтрации ресторанов с сортом более 80, но менее 100Morphia фильтрации неправильно

List<Restaurant_M> r = ds.find(Restaurant_M.class) 
          .field("grades.score").lessThan(100) 
          .field("grades.score").greaterThan(80) 
          .asList(); 

Это работает, но я получаю 1 дополнительный документ, который показан ниже

{ 
    "_id" : ObjectId("572eb5df1d739cc73c21fab1"), 
    "address" : { 
      "building" : "65", 
      "coord" : [ 
        -73.9782725, 
        40.7624022 
      ], 
      "street" : "West 54 Street", 
      "zipcode" : "10019" 
    }, 
    "borough" : "Manhattan", 
    "cuisine" : "American ", 
    "grades" : [ 
      { 
        "date" : ISODate("2014-08-22T00:00:00Z"), 
        "grade" : "A", 
        "score" : 11 
      }, 
      { 
        "date" : ISODate("2014-03-28T00:00:00Z"), 
        "grade" : "C", 
        "score" : 131 
      }, 
      { 
        "date" : ISODate("2013-09-25T00:00:00Z"), 
        "grade" : "A", 
        "score" : 11 
      }, 
      { 
        "date" : ISODate("2013-04-08T00:00:00Z"), 
        "grade" : "B", 
        "score" : 25 
      }, 
      { 
        "date" : ISODate("2012-10-15T00:00:00Z"), 
        "grade" : "A", 
        "score" : 11 
      }, 
      { 
        "date" : ISODate("2011-10-19T00:00:00Z"), 
        "grade" : "A", 
        "score" : 13 
      } 
    ], 
    "name" : "Murals On 54/Randolphs'S", 
    "restaurant_id" : "40372466" 
} 

У этого нет оценки в диапазоне 80-100. это бьет меня. может кто-нибудь сказать, почему этот документ возвращается?

EDIT: Итак, я попытался сделать это с помощью драйвера JAVA, и я неожиданно получаю точно такие же результаты. код выглядит следующим образом

FindIterable<Document> r = collection.find(
      Filters.and(Filters.gt("grades.score", 80),  Filters.lt("grades.score", 100)) 
    ); 

ответ

0

По-видимому, все-таки головной стука я сделал на прошлой неделе, я был не в состоянии сделать это с помощью морфия, поэтому я прибегла к драйверу Java и ниже дает правильные результаты

Bson f1 = Filters.gt("score", 80); 
Bson f2 = Filters.lt("score", 100); 
Bson f3 = and (f1, f2); 

MongoCursor<Document> c = collection.find(
      elemMatch("grades", f3)) 
            .iterator();