Mongodb java springdata无法获得日期等于查询的结果

时间:2015-05-26 17:47:31

标签: java mongodb spring-data

我已经将一些测试记录插入到具有以下结构的mongo数据库中。

  

{     " _id" :ObjectId(" 5563fe96a826638b48c77c26"),

     

"日期" :ISODate(" 2015-05-02T07:00:00.326Z"),

     

" createdDate" :ISODate(" 2015-05-26T05:03:18.899Z"),

     

" updatedDate" :ISODate(" 2015-05-26T05:03:18.899Z"),

     

"状态" :0

     

}

现在,当我尝试使用Spring数据或通过MongoDB查询它时,我总是将返回的结果列表大小设置为0。

Calendar  calendar = Calendar.getInstance();
calendar.set(2015, 4, 2, 0, 0, 0);
Query query = new Query();      
query.addCriteria(Criteria.where("date").is(calendar.getTime());
List<DateRecord> attendanceList = findAll(query, DateRecord.class);
System.out.println(attendanceList.size());

我得到一个非常相似的结果,用于BasicDBObject,大小为0的列表。

DBCursor cursor;
BasicDBObject query1 = new BasicDBObject();
query1.append("date", calendar.getTime());

cursor = collection.find(query1);
System.out.println("Total objects returned "+cursor.size());    

任何关于它的指针都将受到高度赞赏。我只想要根据年,月和日返回数据,并且应忽略任何时间戳字段值。

1 个答案:

答案 0 :(得分:0)

我建议使用不同的查询 - 查找大于2015-4-2 00:00:00的日期,明确小于2015-4-3:00:00:00

我不那么热衷的另一种方法是为了搜索目的而在文档中添加一个字段(例如,在保存文档之前由java计算的“dateWithoutHour”,并假设数据没有到达来自其他来源)。我不喜欢它,因为我更喜欢我的数据是纯粹的逻辑,并且在有人提出新的搜索要求时不会改变......但有时候我不得不诉诸它。)

和往常一样,当遇到困难的查询时,很容易考虑$ where,但我不推荐它,因为它不能使用索引。