1

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

4

3 回答 3

2

首先,Mongo 不是 SQL 数据库,因此您永远不会在其上运行任何 SQL。我建议在 Mongo 命令行上花一些时间来熟悉在 Mongo 中查询文档的工作方式——它在某些方面与 SQL 非常不同,在其他方面完全相同。我还会阅读 Mongo 文档,这非常好:http ://www.mongodb.org/display/DOCS/Home 。

其次,查看您所针对的“SQL”查询,看起来您想要所有的 TestTag,而不仅仅是一个。findOne就像它所说的那样 - 返回一条记录。您可能想find改用。

一个好的起点可能是计算出您将在 mongo 命令行上运行的内容并从那里开始工作。

你不能findOne一起使用和排序,但你应该能够一起使用findAll和排序。如果你只想要一个结果,你可以为查询添加一个限制:query.limit(1)我相信。

于 2011-09-15T05:49:18.253 回答
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);
}

我想是对你问题的回答。

于 2014-08-25T13:43:03.180 回答
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);
}
于 2013-03-20T22:37:31.947 回答