2017-07-26 35 views
0

我試圖用讓我自己查詢的蒙戈庫:MongoRepository JSON日期查詢(春季)

@Repository 
public interface LogEntryRepository extends MongoRepository<LogEntry,String> { 

    @Query("{'created_at' : {{ $gte: ISODate(?0)},{$lt: ISODate(?1)}}, " + 
     "$or: [{'site': {$regex: ?2}}, {'login': {$regex: ?2}}, {'ip': {$regex: ?2}} ]" + 
     "}") 
    public Page<LogEntry> findByDateTimeBetweenAndCriteria(String isoStartDate, String isoEndDate, String searchTerm, Pageable page); 

} 

我想實現的是,雖然搜索與關鍵字過時的日誌。上述抱怨解析錯誤:

 Caused by: com.mongodb.util.JSONParseException: 
    {'created_at' : { $gte: ISODate("_param_0"), $lt: ISODate("_param_1")}, $or: [{'site': {$regex: "_param_2"}}, {'login': {$regex: "_param_2"}}, {'ip': {$regex: "_param_2"}} ]} 
          ^

如果我更換ISODate(?0)只是?0它產生Page 1 of 0 containing UNKNOWN instances

isoStartDate & isoEndDatejava.util.Date生產,像這樣2017-06-27T00:00:00.000Z

怎麼辦我在那裏得到我的約會?

回答

0

ISODate是一個Mongo shell構造,用於創建一個BSON日期,並且絕對不是有效的JSON,這是我相信你的錯誤正在抱怨的東西。

嘗試使用{ '$date' : '?0' }{ '$date' : '?1' }代替上述ISODate調用,如answer中所建議。所有的字符串可能都需要用單引號括起來。

+0

即使這會導致JSON解析錯誤:@Query(「{'created_at':{$ date:?0}}」)'與?0 = 2017-06-28T00:00:00.000Z(字符串)。有什麼想法嗎? – OrangePot

+0

@OrangePot你應該在'「$ date」周圍加雙引號' – Kdawg

+0

這個似乎沒有什麼區別,我把escape放在'$ date'附近,這個小符號'^'在錯誤之下時,消息顯示 – OrangePot