J'ai une collection mongo et chaque document de cette collection a une chaîne de date au format suivant: {"etd": "15-Mar-21"} Je veux interroger et récupérer uniquement ceux-là ...

1
Anuj Panchal 15 mars 2021 à 06:32

1 réponse

Meilleure réponse

Utilisez l'agrégation pour d'abord ajouter un champ à tous les documents avec la date convertie à l'aide de la directive $dateFromString.

{
    $addFields: {
      date: {
        $dateFromString: {
          dateString: "$etd"
        }
      }
    }
  }

Ce qui précède ajoutera un champ date à chaque document (juste pour la durée de la requête) qui stockera les objets Date qui correspondent à leur représentation sous forme de chaîne. Donc "15-Mar-21" deviendra ISODate("2021-03-15T00:00:00Z")

Et puis utilisez simplement $match pour faire correspondre tous les documents où date est supérieur à une date donnée. Voici donc l'agrégation complète:

db.collection.aggregate([
  {
    $addFields: {
      date: {
        $dateFromString: {
          dateString: "$etd"
        }
      }
    }
  },
  {
    $match: {
      date: {
        $gt: ISODate("2021-03-15T00:00:00Z")
      }
    }
  }
])

Aire de jeu: https://mongoplayground.net/p/LSHcukh05jk

0
codemonkey 15 mars 2021 à 03:45