MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB find Query-Vergleich mit CurrentDate

Gemäß Ihrer Frage möchten Sie aktuelle Tagesdokumente aus einer Mongodb-Sammlung abrufen . In der MongoDB-Shell, wenn Sie new Date() eingeben Es gibt Ihnen das aktuelle Datum mit Uhrzeit und dieser Wert variiert immer, wenn Sie dasselbe new Date() ausführen also wahrscheinlich Ihre Abfrage so:

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

Aber ich denke, diese Abfrage gibt die Dokumente zurück, die in Ihrer Sammlung präsentiert werden, aber dasselbe aktuelle Date Der Wert ist in Ihren Dokumenten möglicherweise nicht vorhanden. In diesem Fall sollten Sie also das folgende

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

Oder

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

In einigen Fällen, wenn Sie eine genaue Übereinstimmung mit year,month,day finden möchten dann sollten Sie die Aggregation verwenden mit $year,$month,$dayOfMonth in $project so :

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()
  }
})

Die obige Aggregationsabfrage gibt die Dokumente zurück, die mit dem aktuellen Datum übereinstimmen, wie year,month,day des aktuellen Datums. Außerdem ersetzen Sie $match als

var currentDate = new Date()

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