2016-06-26 2 views
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(); 

пожалуйста к сведению, что следующее не работает

ds.find(Restaurant_M.class) 
      .field("grades.score") 
      .greaterThan(80) 
      .lessThan(100) 
      .asList(); 

моя цель состоит в том, чтобы получить все документы, где счет в классы поддокументу только от 80 до 100 он должен $ и $ gt: 80 и $ lt: 100. В заявлении morphia, который я опубликовал, проверяется только каждый индивидуальный счет для обоих условий. он не проверяет все баллы в $ и. поэтому я получаю документы, где оценка равна, например. 130 (потому что это> 80).

ответ

0

Вы можете использовать AND оператора справиться с этим:

Query<Restaurant_M> query = getDs().find(Restaurant_M.class); 
query.and(query.criteria("grades.score").greaterThan(80), query.criteria("grades.score").lessThan(100)); 
List<Restaurant_M> orders = query.asList(); 

Использование морфий версии 1.2.0

+0

жаль, что до сих пор не работает. он также возвращает ресторан с оценкой = 131. Примечание: рестораны имеют более одного сорта. – Newton

+1

Да, вы правы. Я посмотрел на исходный код морфий и не нашел ответа на вопрос. Кажется, текущая версия не поддерживает несколько критериев для массива документов. Также я зарегистрировал [выпуск] (https://github.com/mongodb/morphia/issues/970) в morphia github. – EugeneL

+0

так и думал. Благодарю. Я сделал это, используя hasAnyOf() – Newton

Смежные вопросы