Ответ 1
То, что вы делаете, запрашивает только {$lte: toDate}
проигрывание $gte
оператора в перезаписи ключей. Вы хотите:
query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());
Я сохранил значение как java.util.Date() в моей коллекции, но когда я запрашиваю значения между двумя конкретными датами, я получаю значения вне диапазона. Здесь мой код:
для вставки
BasicDBObject object = new BasicDBObject();
...
object.put("dateAdded", new java.util.Date());
collection.insert(object);
запросить
BasicDBObject query = new BasicDBObject();
query.put("dateAdded", new BasicDBObject("$gte", fromDate));
query.put("dateAdded", new BasicDBObject("$lte", toDate));
collection.find(query).sort(new BasicDBObject("dateAdded", -1));
когда я запрашиваю между Wed Jul 27 16:54:49 EST 2011
и Wed Jul 27 16:54:49 EST 2011
(в основном fromDate = toDate), я получаю объекты с датами типа Tue Jul 26 09:43:37 EST 2011
, которые определенно не могут быть возможны. Что мне здесь не хватает?
То, что вы делаете, запрашивает только {$lte: toDate}
проигрывание $gte
оператора в перезаписи ключей. Вы хотите:
query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());
Использование mongo client 3.0
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH);
Bson filter = new Document("$gte", format.parse("2015-05-01T00:00:00Z")).append("$lt", format.parse("2015-05-02T00:00:00Z"));
long count = db.getCollection("colection").count(new Document("field",filter) );
Дата поиска в конкретном формате, описанном ниже, заключается в том, что это также работает в mongo 3.0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy.MM.dd");
Сначала конвертируйте дату в свой формат, вы можете использовать любой формат и анализировать свою дату с указанным выше форматом, а затем передавать запрос.
String date ="2014.01.02";
String data1 ="2014.01.10";
Date startDate = simpleDateFormat.parse(date);
Date endDate = simpleDateFormat.parse(date1);
BasicDBObject query = new BasicDBObject("fieldName",
new BasicDBObject("$gte",startDate).append("$lt",endDate ));
Итак, основываясь на вашем требовании, вы можете искать дату, задавая аргумент в BasicDBobject
.
Если вы используете MongoTemplate из Spring -Data Mongodb, вы можете сделать то же самое следующим образом: -
public List<Link> getLinksBetweenDate(Date startDate, Date endDate) {
Query query = new Query().addCriteria(Criteria.where("updatedOn").gt(startDate).lte(endDate));
return mongoTemplate.find(query, Link.class);
}