2015-11-02 6 views
5

Мой код должен поддерживать любой запрос, отправляемый клиентом. Клиент будет отправлять запрос как json. Я сделал это, используя java mongo driver low level api, используя следующий код:
BasicDBObject queryObject = (BasicDBObject) JSON.parse(whereJson.toString());
Как я новичок в данных весны mongodb, я не могу найти подобное решение в классах Query или Criteria. Я проверил различные учебники и не нашел их. Можно ли использовать весенние данные mongodb или я должен использовать apis самого низкого уровня?Spring data mongodb query by json string

ответ

6

Вы можете создать экземпляры запросов из простой строки JSON с помощью объекта BasicQuery. В следующем примере показано, как можно построить экземпляр запроса из простого JSON строки:

BasicQuery query = new BasicQuery("{ age : { $lt : 50 } }"); 
List<Person> result = mongoTemplate.find(query, Person.class);  

Другой способ, который использует низкоуровневый API:

DBObject dbObject = (DBObject) JSON.parse(query); 
DBCursor cursor = mongoTemplate.getCollection("person").find(dbObject); 

Вы можете отобразить возвращать объекты обратно ваше лицо POJO с использованием метода MongoConverter read():

List<Person> returnList = new ArrayList<Person>(); 
while (cursor.hasNext()) { 
    DBObject obj = cursor.next(); 
    Person person = mongoTemplate.getConverter().read(Person.class, obj); 
    returnList.add(person); 
} 
+2

Ничего себе. Спасибо за это . Я застрял и ожидал решения. Спасибо большое :) –

+1

@Mohammedshebin Не стоит беспокоиться, рад помочь :) – chridam

+0

@chridam Привет, Как поддерживать агрегированный запрос, например db.CollectionName.aggregate ([{$ match: {"st": "i"}}, { $ group:}, {} ..]) ...? –