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结果中,无论它们是否在“New”类别中。
也就是说,第二个查询中的and(“category”).is(“New”)好像被忽略了。
使用Spring Data和Mongodb版本v2.0.6 32位。
感谢您的帮助。
更新05/09/2012
仍然不起作用。
更新26/08/2012
这将在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 shell正常工作,我需要使用ISODate(..)。但是我正在使用MongoDB Java驱动程序,并且接受java.util.Date类型 - 为什么ISODate(..)没有出现会成为问题呢?问题可能有其他原因。