Критерии данных MongoDB Spring Не оператор

У меня есть следующий код для поиска в mongo db с использованием весенних данных mongodb (версия 1.2.3.RELEASE)

Criteria searchCriteria = Criteria.where("NAME").is("TestName")
        .and("ID").is("TestID").not().and("Age").is("23");

Я получил следующий запрос (без оператора not)

Query: { "NAME" : "TestName" , "ID" : "TestID", "Age" : "23" }

Я ожидал следующего запроса

Query: { "NAME" : "TestName" , "$not" : { "ID" : "TestID"}, "Age" : "23" }

Что я делаю не так ? Любая помощь приветствуется. Спасибо


person Viraj    schedule 14.10.2013    source источник


Ответы (2)


Вместо этого я использовал «ne».

 Criteria searchCriteria = Criteria.where("NAME").is("TestName").and("ID").ne("TestID").and("Age").is("23");

Mongo db 'not' - это логический оператор. http://docs.mongodb.org/manual/reference/operator/query/not/

person Viraj    schedule 14.10.2013

Согласно documentation not() влияет на предложение, следующее непосредственно за. Это .and("Age").is("23"). Но вам, вероятно, придется поставить его перед is.

Criteria searchCriteria = Criteria.where("NAME").is("TestName").and("ID").not().is("TestID").and("Age").is("23");

Если это не работает, попробуйте использовать конструкции andOperator и not().where("ID").

person Gabriel Petrovay    schedule 14.10.2013
comment
Спасибо за Ваш ответ. Я попробовал это и пошел после ошибки. java.lang.RuntimeException: org.springframework.data.mongodb.InvalidMongoDbApiUsageException: Invalid query: 'not' can't be used with 'is' - use 'ne' instead. - person Viraj; 14.10.2013
comment
Это научит вас не просто использовать первый ответ, который вы видите. Редактировать: Под вами я подразумеваю МЕНЯ. - person taylorcressy; 10.08.2014