46

春のデータ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クエリを構築するためのメソッド呼び出しの正しい順序は何ですか?

4

10 に答える 10

98

' 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 つの異なるエントリとして認識します。

于 2012-10-29T16:42:19.403 に答える
7

私はフィールド間の日付を見つけなければなりませpublishedDateんでした。これが私がそれをした方法です:

    Criteria publishedDateCriteria = Criteria
                        .where("publishedDateObject").gte(psDate)
                        .lte(peDate);
    Query query = new Query(publishedDateCriteria);
    mongoTemplate.find(query,
                        MyDocumentObject.class));
于 2015-09-27T09:39:32.210 に答える
4

これは、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」があります。

于 2012-05-01T09:14:47.943 に答える