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")
第二个查询被忽略一样。
使用带有 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 代码(对于相同的日期参数)不起作用。为了比较,DEBUG 从 Java 记录的查询是:
[DEBUG] [http-8080-1] (MongoTemplate.java:doFind:1256) find using query:
{ "submittalDate" : { "$gte" : { "$date" : "2012-07-31T23:00:00.000Z"}} , "category" : "New"}
是的,日志记录了一个日期字符串,而为了让 Mongo shell 正常工作,我需要使用 ISODate(..)。但是我正在使用具有可接受类型的 java.util.Date 的 MongoDB Java 驱动程序 - ISODate(..) 怎么可能没有出现问题?问题可能有另一个原因。