我需要使用spring data api执行以下sql查询:
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 :(得分:2)
首先,Mongo不是SQL数据库,因此您永远不会在其上运行任何SQL。我建议在Mongo命令行上花一些时间来熟悉查询文档在Mongo中的工作方式 - 它在某些方面与SQL非常不同,在其他方面完全相同。我还阅读了Mongo文档,这非常好:http://www.mongodb.org/display/DOCS/Home。
其次,看看你想要的'SQL'查询,看起来你想要所有的TestTag,而不仅仅是一个。 findOne
正如它所说的那样 - 返回一条记录。您可能希望使用find
代替。
一个好的起点可能是找出你在mongo命令行上运行的内容并从那里开始工作。
您无法使用findOne
并排序,但您应该能够使用findAll
并进行排序。如果您只想要一个结果,则可以为查询添加限制:{} {}我相信。
答案 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);
}
答案 2 :(得分: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);
}
是我认为对你的问题的回应。