2016-08-09 8 views
1

私はSpringBootを使ってWebアプリケーションを開発していますが、findByMonth(intまたはString月)というクエリを作成しようとしていますが、findByNameAndMonth(String名前、月)またはfindByIdAndMonth()が可能ですか? 日付はLocalDateタイプです。春のデータMongoDB:月のクエリ

私はこのようなオブジェクトがあります。

public final class Alarm { 
    @id 
    private final String id; 
    private final String type; 
    // .... 
    private final LocalDate date; 

とそのmongoRepository:

db.alarm.find({ $where : 'return this.date.getMonth() == 5'}) 

public interface AlarmRepository extends MongoRepository<Alarm, String>{ 
} 

は、クエリは、例えば次のクエリと同じ結果を与えることになっています

+0

はい、http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ – Palcente

+0

どの段落にしてください! – mahaSaez

+0

全体を読む...遅く始めるが、終わりに向かって良くなる...それは長くないし、あなたはそれが有用であると感じるだろう... またはJPAリポジトリから開始 – Palcente

答えて

0

LocalDate ISODateようにMongoDBに格納されているので、(date.monthは単に作業及び方法getMonth()されていない使用しなければならない)直接プロパティのアクセスすることは不可能です。

これにより、Springデータの日付の使用が少し複雑になります。私はあなたのリポジトリにこのメソッドを作成することをお勧めあなたの問題を解決するには、次の

List<Alarm> findByDateBetween(LocalDate from, LocalDate to); 

しかし、あなたは境界条件(月の月と最後の初め)の世話をする必要があります。

もう一つの選択肢は、documentationで説明されているように、日付をプレーンオブジェクトとして保存し、アクセス月をそのプロパティで保存することです。

0

はい、可能です。 Spring Dataは、リポジトリメソッド名に同じ変数名が必要です。例: public final class Alarm { @id private final String id; private final String type; .... private final LocalDate date;

次に、メソッド名は次のようになります。

findByIdAndDate(String id, LocalDate date); findByIdAndType(String id, String type);

+1

はい私はこの質問を知っていますが、私の質問は同じことをしていましたが、このクエリのように日付全体ではなく月だけでした** db.alarm.find({$ where: 'return this.date .getMonth()== 5 '})** – mahaSaez

関連する問題