2011-09-14 61 views
1

實現排序,我需要用春天的數據API來執行下面的SQL查詢:問題在春季數據(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非常不同,在其他方面完全相同。我還會讀一讀Mongo文檔,這很好:http://www.mongodb.org/display/DOCS/Home。其次,看看你正在瞄準的'SQL'查詢,看起來你想要所有的TestTag,而不僅僅是一個。 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); 
} 

是你的問題的迴應,我認爲。