2012-04-25 7 views
23

Uso i dati della molla mongodb.Dati primaverili MongoDB Data tra

Desidero i record tra due date. Il seguente MongoDB query funziona:

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

mio tentativo di query di dati Primavera traduzione codice oggetto non funziona:

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

Qual è l'ordine corretto delle chiamate di metodo per costruire la query Mongo ho bisogno?

+0

Quando si inserisce fileName (ad es. StartDate) più di una volta si ottiene ** InvalidMongoDbApiUsageException ** .... non è possibile aggiungere un secondo 'startDate' ... – Hamedz

risposta

3

questo funziona alla versione 2.7.2 del driver 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); 

Inoltre, per la cronaca si ha "startDate" sia per il gte ei parametri LTE.

+0

Grazie bell'esempio. – ujava

42

Non includere la parte "e (" data iniziale "" nei criteri.

Invece di:

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

Si dovrebbe usare:

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

quando si include la 'e ("startDate")' parte, Mongo vedere è come due voci differenti sulla stessa proprietà .

+2

Questa è una risposta completamente corretta e dovrebbe essere contrassegnata come corretta. –

+1

solo facendo una nota qui che "startDate" e "endDate" sono oggetti java.util.Date e produrranno una query mongodb come "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)); non ha funzionato nel mio caso. Cosa dovrei usare per trovare l'oggetto dob in db come: "dob": ISODate ("1991-01-22T18: 30: 00Z"), –

0

Funziona, lui è un po 'di codice di esempio:

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

Sto provando qualcosa come cercare dob. Ma non ho trovato nessun utente. Sebbene siano 200 utenti nel database. Criteri = Criteria.where ("dob"). Lt (startDate.getTime()). Gte (endDate.getTime()); –

1

ho dovuto trovare le date tra il campo publishedDate e qui è come ho fatto:

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

Grazie James, è davvero utile. –

+0

@ user3327951, bello sapere. :) Grazie. –

2

Reference here

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