Est-il possible de demander une date précise?
J'ai trouvé dans le livre de recettes mongo que nous pouvons le faire pour une plage Interrogation d'une plage de dates comme celle-ci:
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
Mais est-ce possible pour une date précise? Cela ne fonctionne pas:
db.posts.find({"created_on": new Date(2012, 7, 14) })
... 5+ ans plus tard, je suggère fortement d'utiliser les date-fns à la place
Pour ceux d'entre nous qui utilisent Moment.js
Important: tous les moments sont mutables !
tomorrow = today.add(1, 'days')
ne fonctionne pas car il mute égalementtoday
. L'appelmoment(today)
résout ce problème en clonant implicitementtoday
.la source
.startOf('day')
au lieu de .hours (0) .minutes (0) .seconds (0). La première ligne serait donc:var today = moment().startOf('day')
moment(today)
pour cloner l'objet, une autre solution est:var tomorrow = today.clone().add(1, 'days')
$lt
:moment(today).endOf('day')
. Pour éviter que les résultats réels du lendemain ne soient inclus.moment(today).endOf('day')
donne le même jour avec le temps de:23:59:59.999
. Cela semble donc plus correct à utiliser$lte
, sinon les objets à ce moment-là seront ignorés.Ouais, l'objet Date complète la date et l'heure, donc le comparer avec la valeur de date uniquement ne fonctionne pas.
Vous pouvez simplement utiliser l' opérateur $ where pour exprimer une condition plus complexe avec une expression booléenne Javascript :)
created_on
est le champ datetime et2012-07-14
est la date spécifiée.La date doit être exactement au format AAAA-MM-JJ .
Remarque: à utiliser
$where
avec parcimonie, cela a des implications sur les performances.la source
As-tu essayé:
Le problème que vous allez rencontrer est que les dates sont stockées sous forme d'horodatages dans Mongo. Donc, pour correspondre à une date, vous lui demandez de correspondre à un horodatage. Dans votre cas, je pense que vous essayez de faire correspondre un jour (c'est-à-dire de 00h00 à 23h59 à une date précise). Si vos dates sont stockées sans heure, vous devriez être d'accord. Sinon, essayez de spécifier votre date sous forme de plage horaire le même jour (par exemple, début = 00: 00, fin = 23: 59) si gte ne fonctionne pas.
question similaire
la source
$gte
au lieu degte
cela, ce serait mieux.Vous pouvez utiliser l'approche suivante pour la méthode API pour obtenir des résultats d'un jour spécifique:
la source
Nous avons eu un problème lié aux données dupliquées dans notre base de données, avec un champ de date ayant plusieurs valeurs là où nous étions censés avoir 1. J'ai pensé ajouter la façon dont nous avons résolu le problème pour référence.
Nous avons une collection appelée "data" avec un champ numérique "value" et un champ date "date". Nous avons eu un processus que nous pensions idempotent, mais nous avons fini par ajouter 2 x valeurs par jour lors de la deuxième exécution:
Nous n'avons besoin que de 1 des 2 enregistrements, nous avons donc dû recourir au javascript pour nettoyer la base de données. Notre approche initiale allait consister à parcourir les résultats et à supprimer tout champ avec un temps compris entre 6h et 11h (tous les doublons étaient le matin), mais lors de la mise en œuvre, nous avons fait un changement. Voici le script utilisé pour résoudre ce problème:
et puis l'a couru avec
mongo thedatabase fixer_script.js
la source