web-dev-qa-db-ja.com

Spring Data MongoDB Date Between

スプリングデータmongodbを使用します。

2つの日付の間のレコードが必要です。次のMongoDBクエリが機能します。

db.posts.find({startDate: {$gte: start, $lt: end}});

私が試みたSpringデータクエリオブジェクトコードの翻訳は機能しません:

Query query = new Query();
query.addCriteria(Criteria.where("startDate").gte(startDate)
                            .and("startDate").lt(endDate));

必要なMongoクエリを構築するためのメソッド呼び出しの正しい順序は何ですか?

30
ujava

条件に「and( "startDate")」の部分を含めないでください。

の代わりに :

query.addCriteria(Criteria.where("startDate").gte(startDate).and("startDate").lt(endDate));

以下を使用する必要があります。

query.addCriteria(Criteria.where("startDate").gte(startDate).lt(endDate));

'and( "startDate")'部分を含めると、Mongoはそれを同じプロパティの2つの異なるエントリとして認識します。

58
Yohan Liyanage

ここを参照

Query query = new Query(
  Criteria.where("ip").is(ip)
  .andOperator(
    Criteria.where("createdDate").lt(endDate),
    Criteria.where("createdDate").gte(startDate)
  )
);
4
DarwinFernandez

フィールドpublishedDateの日付を見つけなければなりませんでした。

    Criteria publishedDateCriteria = Criteria
                        .where("publishedDateObject").gte(psDate)
                        .lte(peDate);
    Query query = new Query(publishedDateCriteria);
    mongoTemplate.find(query,
                        MyDocumentObject.class));
3
James Jithin

クエリ注釈を追加することもできます。

@Query("{'date' : { $gte: ?0, $lte: ?1 } }")                 
public List<AnyYourObj> getObjectByDate(Date from, Date to); 

または適切なスプリングデータメソッドシグネチャ:

public List<AnyYourObj> findByDateBetween(Date from, Date to);

これらのアプローチはどちらも同じ結果をもたらします。詳細はこちら https://www.baeldung.com/queries-in-spring-data-mongodb およびこちら https://docs.spring.io/spring-data/mongodb/docs/current/reference/html /

3
S.Dayneko

これは、Javaドライバーのバージョン2.7.2で動作します

DBCollection coll = db.getCollection("posts");  

BasicDBObject date = new BasicDBObject();
date.append("$gte", new Date(startDate));
date.append("$lte", new Date(endDate));

DBObject query = new BasicDBObject();
query.put("date", date);

DBCursor cursor = coll.find(query);

また、レコードには、gteパラメーターとlteパラメーターの両方に「startDate」があります。

2
user1367351

それは動作します、彼はいくつかのサンプルコードです:

Criteria criteria = Criteria.where("pt").gte(startDate)
       .andOperator(Criteria.where("pt").lt(endDate));
0
user2735611

私はこうしました

public interface PolicyRepository extends MongoRepository<Policy, String> {
    @Query("{ 'lastDate' : { $gt: ?1, $lt: ?2 } }")
        public List<Policy> findAllPolicies(Date today,Date somedate);
}
0
Pradeep Sreeram