在Spring数据中实现Sort的问题(Mongodb)

时间:2011-09-14 05:28:47

标签: mongodb spring-data

我需要使用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中的结果。 方法是否正确?如果我错了,请告诉我正确的方法。 感谢。

3 个答案:

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

是我认为对你的问题的回应。