2017-07-26 19 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"}} ]} 
          ^

私は単に?0ISODate(?0)を交換した場合、それはPage 1 of 0 containing UNKNOWN instances

ストリングスisoStartDate & isoEndDatejava.util.Dateから生成し、どうすればよい。この2017-06-27T00:00:00.000Z

のように見えている生成私はそこに私の日付を取得しますか?

答えて

0

ISODateはBSONの日付を作成するためのMongoシェル構造であり、間違いなくJSONが有効ではありません。これはあなたのエラーが不満であると信じているものです。

answerで提案されているように、上記のISODateコールを{ '$date' : '?0' }{ '$date' : '?1' }に置き換えてみてください。おそらくすべての文字列を一重引用符で囲む必要があります。

+0

でも、@ 0 = 2017-06-28T00:00:00.000Z(String)の '@Query(" {created_at ':{$ date:?0}} ")'というJSON解析エラーが発生します。何かご意見は? – OrangePot

+0

@OrangePot '' $ date "' – Kdawg

+0

を二重引用符で囲む必要があります。 '$ date'の周りにエスケープ文字を置くかどうかは違います。この小さな記号'^'は、エラーメッセージが表示されます – OrangePot

関連する問題