Java/MongoDB query by date
What you're doing is querying only with {$lte: toDate}
losing $gte
operator in the key overwrite. What you want is:
query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());
If you are using MongoTemplate of Spring-Data Mongodb, you can do the same in following way:-
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);
}
Using 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) );
Search Date with specific format following steps are that this also work in mongo 3.0
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy.MM.dd");
First convert your date in your specific format, you can use any format and parse your date with above format and then pass in query.
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 ));
So base on your requirement you can search date by giving argument in BasicDBobject
.
You can do
import org.bson.conversions.Bson;
import static com.mongodb.client.model.Filters.*;
import java.text.SimpleDateFormat;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Bson filter = Filters.and(gte("date_field", format.parse("2018-10-01")),
lt("date_field", format.parse("2019-10-01")))