9 votes

Spring Data MongoDB Date entre deux dates

J'utilise Spring Data pour MongoDB et j'ai les classes suivantes

class A {
    List<B> b;
}

class B {
    Date startDate;
    Date endDate;
}

Lorsque je sauvegarde un objet de A, il est persistant comme suit

{
    "_id" : "DQDVDE000VFP8E39",
    "b" : [
          {
              "startDate" : ISODate("2009-10-05T22:00:00Z"),
              "endDate" : ISODate("2009-10-29T23:00:00Z")
          },
          {
              "startDate" : ISODate("2009-11-01T23:00:00Z"),
              "endDate" : ISODate("2009-12-30T23:00:00Z")
          }
    ]
}

Maintenant, je veux interroger la base de données pour trouver des documents correspondant aux entrées dans b où une date donnée est comprise entre startDate et endDate.

Query query = new Query(Criteria.where("b").elemMatch(
    Criteria.where("startDate").gte(date)
    .and("endDate").lte(date)
);

Ce qui donne la requête mongo suivante :

{
   "b": {
       "$elemMatch": { 
           "startDate" : { "$gte" : { "$date" : "2009-11-03T23:00:00.000Z"}}, 
           "endDate" : { "$lte" : { "$date" : "2009-11-03T23:00:00.000Z"}}
       }
   }
}

mais ne renvoie aucun document. Quelqu'un sait-il ce que je fais de mal ? Je ne comprends pas...

Merci beaucoup d'avance !

13voto

JohnnyHK Points 61191

Si vous voulez trouver des documents où date est entre le startDate y endDate d'un b alors vous devez inverser votre gte y lte appels :

Query query = new Query(Criteria.where("b").elemMatch(
    Criteria.where("startDate").lte(date)
    .and("endDate").gte(date)
);

1voto

Simon Liu Points 89
{"created_at":{$gt:ISODate("2013-04-30T00:00:00Z"),$lt:ISODate("2013-04-30T23:59:59Z")}}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X