2013-01-14 19 views
10

javaを使用して単純なMongoDBクエリを書く必要がありますが、できません。javaを使用してMongoDBクエリを実行する方法?

モンゴクエリは次のようになります。

db.yourCollection.find({"$where" : "this.startDate < this.endDate"}) 

私はQueryBuilderクラスを使用して上記のクエリを記述する必要があります。しかし、MongoDBjavaのドライバでそれを行うことはできません。

BasicDBObject document = new BasicDBObject(); 
document.put("id", 1001); 
document.put("intValue", 1200); 
document.put("updateValue", 2100); 

DBObject query = QueryBuilder.start("intValue").lessThan("updateValue").get(); 
DBCursor cursor = collection.find(query); 
while (cursor.hasNext()) { 
System.out.println("Result : -"+cursor.next());} 

上記のコードは結果を返しません。しかし、updateValue2100に変更すると結果が出ます。ここで私の質問はlessThan入力パラメータとしてオブジェクトを取ります。それでは、どのようにドキュメントフィールドを入力パラメータとして渡すことができますか?

答えて

11

理想的には、あなたのMongoDBのクエリは次のようにする必要があります: - :あなたはOfficial Tutorial


を見てとることができ

BasicDBObject query = new BasicDBObject("startDate", new BasicDBObject("$lt", endDate); 
DBCursor cursor = coll.find(query); 

- このようにJavaで記述することができ

db.yourCollection.find({"startDate": {$lt: endDate}}) 

QueryBuilderを使用する場合は、次のようにすることができます。 -

DBObject query = QueryBuilder.start("startDate").lessThan("endDate").get(); 
DBCursor cursor = coll.find(query); 
+0

上記のクエリビルダが機能していません。 「endDate」が同じ文書内のフィールドである場合私がQueryBuilderでendDateの代わりに一定の値を与えるとうまくいきます。さらに、BasicDBObjectは、第2番目のパラメータでendDateフィールド名を受け入れません – zulu

4

QueryBuilderは、mongo dbのコレクションからデータを取得するための複雑なクエリの作成を支援します。 このようにQueryBuilderを使用できます。

BasicDBObject document = new BasicDBObject(); 
QueryBuilder qb = new QueryBuilder(); 
qb.or(new QueryBuilder().put("starting_date").is(null).put("ending_date").is(null).get(), 
       new QueryBuilder().put("starting_date").lessThanEquals("ending_date").get()); 
document.putAll(qb.get()); 
DBCursor cursor = getDbCollection().find(document) 
  • QueryBuilder QBは=新しいQueryBuilder()、新しいQueryBuilderをインスタンス化します。
  • 上記の例のQueryBuilderで構築されたロジックは、次のとおりです。 (開始日= nullおよび終了日= null)または(開始日< =終了日)
  • document.putAll(qb.get())は、DBObjectに構築されたロジックを追加します。
関連する問題