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")
被忽略一样。
使用Mongodb v2.0.6 32位版本与Spring Data。
帮助表示赞赏。
仍然无效
这将返回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(..)。 但我正在使用MongoDB Java驱动程序和java.util.Date的接受类型 - ISODate(..)怎么不出现问题?问题可能有其他原因。
答案 0 :(得分:1)
我不是春天的专家,但似乎你的一些进口可能会相互冲突。根据我所看到的文档,很难准确诊断出错的地方。如果您没有为此使用弹簧框架,则可以使用替代/更常见的方法。
import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
public class CustomQuery {
public void customQuery(Date submittalDate)
{
document = new BasicDBObject();
document.put(("submittalDate").greaterThanEquals(submittalDate).put("category").is("New").get());
DBCursor cursor = getDbCollection().find(document);
}
}
答案 1 :(得分:0)
{ "$date" : "2012-07-31T23:00:00.000Z"}
等于
Date("2012-07-31T23:00:00.000Z")
和Date("2012-07-31T23:00:00.000Z")
将返回一个字符串,而不是ISODate()。
通过http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON。
我认为这是org.springframework.data.mongodb.core.query.Criteria
的错误。