La requête ne donne aucun résultat car le $hour
l'opérateur n'est appliqué que dans le pipeline d'agrégation, pas le find()
requête. Ainsi, dans votre agrégation, votre pipeline comporte deux étapes, la $project
qui crée un nouveau champ contenant la partie heure et l'étape suivante $match
qui interroge ensuite les documents.
Ainsi, votre opération d'agrégation finale ressemblera à ceci :
var pipeline = [
{
"$project": {
"hour": { "$hour": "$date" },
"date": 1
}
},
{
"$match": {
"hour": { "$gt": 4, "$lt": 8}
}
}
]
db.collection.aggregate(pipeline);