import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
public class CustomQuery {
@Autowired private MongoOperations mongoOperations;
public void customQuery(Date submittalDate) {
List<Question> q1s = mongoOperations.find(
new Query(Criteria.where("category").is("New")),
Question.class);
List<Question> q2s = mongoOperations.find(
new Query(
Criteria.where("submittalDate").gt(submittalDate).and("category").is("New")
),
Question.class);
}
}
一番上の Spring Java MongoDB クエリは、期待される結果を に返しますq1s
。
下部のクエリは、上部のクエリのサブセットを返す必要があります。代わりに、「新規」カテゴリにあるかどうかに関係なく、一致するレコードが("submittalDate").gt(submittalDate)
結果に含まれます。q2s
つまりand("category").is("New")
、2 番目のクエリが無視されているようです。
Spring Data で Mongodb バージョン v2.0.6 32 ビットを使用する。
助けていただければ幸いです。
2012 年 5 月 9 日更新
それでもうまくいかない
2012 年 8 月 26 日更新
これにより、Mongo コマンドラインで結果が返されます。
db.foo.find( { "submittalDate":{ "$gte": ISODate("2012-07-31T23:00:00.000Z") }, "category" : "New" } )
対照的に、Java コード (同じ日付パラメーター用) は機能しません。比較のために、Java から DEBUG によってログに記録されたクエリは次のとおりです。
[DEBUG] [http-8080-1] (MongoTemplate.java:doFind:1256) find using query:
{ "submittalDate" : { "$gte" : { "$date" : "2012-07-31T23:00:00.000Z"}} , "category" : "New"}
はい、ログには日付文字列が記録されますが、Mongo シェルを機能させるには ISODate(..) を使用する必要がありました。しかし、私は MongoDB Java ドライバーを java.util.Date の受け入れられたタイプで使用しています - どうすれば ISODate(..) が問題にならないのでしょうか? 問題には別の原因がある可能性があります。