web-dev-qa-db-fra.com

Données de printemps MongoDB Date Entre

J'utilise les données de printemps mongodb.

Je veux les enregistrements entre deux dates. La requête MongoDB suivante fonctionne:

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

Ma traduction de code d'objet de requête de données Spring tentée ne fonctionne pas:

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

Quel est le bon ordre d'appels de méthode pour construire la requête Mongo dont j'ai besoin?

27
ujava

N'incluez pas les parties ' et ("startDate") ' dans vos critères. 

Au lieu de :

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

Tu devrais utiliser:

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

Lorsque vous incluez la partie 'et ("startDate")', Mongo la voit comme deux entrées différentes sur la même propriété. 

54
Yohan Liyanage

Référence ici

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

Cela fonctionne sur la version 2.7.2 du pilote 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);

En outre, pour l'enregistrement, vous avez "startDate" pour les paramètres gte et lte.

2
user1367351

Je devais trouver des dates entre le champ publishedDate et voici comment je l’ai fait:

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

Vous pouvez également ajouter une requête à la requête: 

@Query("{'date' : { $gte: ?0, $lte: ?1 } }")                 
public List<AnyYourObj> getObjectByDate(Date from, Date to); 

Ou une signature de méthode de données de printemps appropriée:

public List<AnyYourObj> findByDateBetween(Date from, Date to);

Ces deux approches donnent le même résultat . Vous pouvez en lire plus ici https://www.baeldung.com/queries-in-spring-data-mongodb Et ici https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/

1
S.Dayneko

Cela fonctionne, il est un exemple de code:

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