MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB trouve la comparaison de requête avec CurrentDate

Selon votre question vous souhaitez récupérer les documents actuels d'une collection mongodb . Dans le shell mongoDB lorsque vous tapez new Date() il vous donne la date actuelle avec l'heure et cette valeur varie toujours lorsque vous exécutez le même new Date() donc probablement votre requête comme celle-ci :

db.collectionName.find({"start_date":new Date()}).pretty()

Mais, je pense que cette requête renvoie les documents qui seront présents dans votre collection mais la même Date actuelle la valeur peut ne pas être présente dans vos documents DONC ce cas, vous devez utiliser ce qui suit

db.collectionName.find({"start_date":{"$lte":new Date()}}).pretty()

Ou

db.collectionName.find({"start_date":{"$gte":new Date()}}).pretty()

Dans certains cas, si vous souhaitez trouver une correspondance exacte avec year,month,day alors vous devez utiliser agrégation avec $year,$month,$dayOfMonth in $project comme ça :

db.collectionName.aggregate({
  "$project": {
    "year": {
      "$year": "$date"
    },
    "month": {
      "$month": "$date"
    },
    "day": {
      "$dayOfMonth": "$date"
    }
  }
}, {
  "$match": {
    "year": new Date().getFullYear(),
    "month": new Date().getMonth() + 1, //because January starts with 0
    "day": new Date().getDate()
  }
})

Dans la requête d'agrégation ci-dessus renverra les documents qui correspondent à la date actuelle comme year,month,day de la date actuelle. Vous remplacez également $match comme

var currentDate = new Date()

 {
  "$match": {
    "year": currentDate.getFullYear(),
    "month": currentDate.getMonth() + 1, //because January starts with 0
    "day": currentDate.getDate()
  }
}