Проблема с реализацией данных Sort in Spring (Mongodb) - PullRequest
1 голос
/ 14 сентября 2011

Мне нужно выполнить следующий SQL-запрос с использованием API данных Spring:

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.Правильный ли подход?Пожалуйста, дайте мне знать правильный подход, если я ошибаюсь.Спасибо.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011

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

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

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

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

0 голосов
/ 25 августа 2014

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

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);
}

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

0 голосов
/ 21 марта 2013

Почему вы запускаете 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...