2012-04-25 11 views
23

Utilizo mongodb de datos de muelles.Datos del muelle MongoDB Fecha entre

Quiero los registros entre dos fechas. La siguiente consulta MongoDB funciona:

db.posts.find({startDate: {$gte: start, $lt: end}}); 

Mi consulta de datos de primavera traducción del código objeto intento no funciona:

Query query = new Query(); 
query.addCriteria(Criteria.where("startDate").gte(startDate) 
          .and("startDate").lt(endDate)); 

¿Cuál es el orden correcto de las llamadas de método para construir la consulta Mongo necesito?

+0

Cuando pones fileNombre (por ejemplo, startDate) más de una vez obtienes ** InvalidMongoDbApiUsageException ** .... no puedes agregar un segundo 'startDate' ... – Hamedz

Respuesta

3

Esto funciona en la versión 2.7.2 del controlador Java

DBCollection coll = db.getCollection("posts"); 

BasicDBObject date = new BasicDBObject(); 
date.append("$gte", new Date(startDate)); 
date.append("$lte", new Date(endDate)); 

DBObject query = new BasicDBObject(); 
query.put("date", date); 

DBCursor cursor = coll.find(query); 

Además, para el registro que tiene "startDate" tanto para el GTE y los parámetros LTE.

+0

Gracias buen ejemplo. – ujava

42

No incluya la parte 'y ("startDate")' en sus criterios.

En lugar de:

query.addCriteria(Criteria.where("startDate").gte(startDate).and("startDate").lt(endDate)); 

Deberá utilizar:

query.addCriteria(Criteria.where("startDate").gte(startDate).lt(endDate)); 

cuando se incluye el 'y ("startDate")' parte, Mongo ver es como dos entradas diferentes en la misma propiedad .

+2

Esa es una respuesta completamente correcta y debe marcarse como correcta. –

+1

simplemente haciendo una nota aquí que "startDate" y "endDate" son objetos java.util.Date y producirá una consulta mongodb como "startDate": {"$ gte": {"$ date": "2014-09-01T07 : 00: 00.000Z "}," $ lt ": {" $ date ":" 2014-10-01T07: 00: 00.000Z "}}} – java25

+0

query.addCriteria (Criteria.where (" dob "). Gte (startDate) .lt (endDate)); no funcionó en mi caso Lo que debería usar para encontrar el objeto dob en db como: "dob": ISODate ("1991-01-22T18: 30: 00Z"), –

0

Funciona, que es un código de ejemplo:

Criteria criteria = Criteria.where("pt").gte(startDate) 
     .andOperator(Criteria.where("pt").lt(endDate)); 
+0

Estoy intentando algo así como buscar dob. Pero no pude encontrar ningún usuario. Aunque son 200 usuarios en la base de datos. criteria = Criteria.where ("dob"). Lt (startDate.getTime()). Gte (endDate.getTime()); –

1

que tenía que encontrar fechas entre el campo publishedDate y aquí es cómo lo hice:

Criteria publishedDateCriteria = Criteria 
         .where("publishedDateObject").gte(psDate) 
         .lte(peDate); 
    Query query = new Query(publishedDateCriteria); 
    mongoTemplate.find(query, 
         MyDocumentObject.class)); 
+1

Gracias James, realmente útil. –

+0

@ user3327951, genial de saber. :) Gracias. –

2

Reference here

Query query = new Query(
    Criteria.where("ip").is(ip) 
    .andOperator(
    Criteria.where("createdDate").lt(endDate), 
    Criteria.where("createdDate").gte(startDate) 
) 
); 
Cuestiones relacionadas