2011-09-14 13 views
1

мне нужно сделать следующий SQL запрос с использованием API весной данных:Проблема с реализацией Сортировка весной данных (MongoDB)

Select * from TagTest where tagName = "water temperature" Order by timestamp desc; 

Я придумал запрос:

Query query = new Query(Criteria.where("tagName").is("water temperature")); 

Я определила Sort как:

query.sort().on("timestamp", Order.DESCENDING); 

и используя mongoTemplate сделать findOne() как:

mongoTemplate.findOne(Collection, query, MongoTag.class); 

Но я не могу найти способ применить сортировку для получения результатов в findOne. Правильно ли этот подход? Пожалуйста, дайте мне знать правильный подход, если я ошибаюсь. Спасибо.

+0

является 'mongoTemplate.findOne (Collection, query, MongoTag.class);' в цикле for и вы добавляете его в ArrayList или Array? Если нет, то вы не сможете сортировать данные из одного единственного возвращаемого значения. –

ответ

2

Прежде всего, Mongo не является базой данных SQL, поэтому вы никогда не будете запускать какой-либо SQL на нем. Я рекомендую потратить некоторое время на командную строку Mongo, чтобы ознакомиться с тем, как запрос на работу с документами работает в Mongo, - это очень сильно отличается от SQL в некотором смысле, точно так же в других. Я бы тоже прочитал документацию Монго, что довольно хорошо: http://www.mongodb.org/display/DOCS/Home.

Во-вторых, глядя на запрос «SQL», на который вы нацеливаетесь, похоже, что вы хотите, чтобы все тестовые теги, а не только один. findOne делает только то, что он говорит - возвращает одну запись. Вероятно, вы, скорее всего, захотите использовать find.

Хорошее место для начала - это, вероятно, выработать то, что вы будете использовать в командной строке mongo, и работать оттуда.

Вы не можете использовать findOne и сортировать вместе, но вы должны уметь использовать findAll и сортировать вместе. И если вам нужен только один результат, вы можете добавить ограничение на запрос: query.limit(1) Я верю.

0

Почему вы используете findOne, а затем пытаетесь установить сорт? Вы пробовали это в традиционном SQL? Это не имеет смысла. В противном случае вы на правильном пути. Попробуйте следующее, он работал для меня:

public List<Person> listPersons() { 
    Query query = new Query(); 
    query.limit(MAX_ROWS) 
     .sort().on("dateCreated", Order.ASCENDING); 

    return mongoTemplate.find(query, Person.class); 
} 
0

Вы можете использовать его как это:

public List<Person> listPersons() { 
Criteria criteria=Criteria.where("tagName").is("water temperature")); 
Query query = new Query(); 
query.addcriteria(criteria); 
query.with(new Sort(Sort.Direction.ASC,"dateCreated")) ; 

return mongoTemplate.find(query, Person.class); 
} 

является ответом на ваш вопрос я думаю.