首页 文章

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

提问于
浏览
0

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

{“_ id”:ObjectId(“5563fe96a826638b48c77c26”),“date”: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

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

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

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

相关问题