48 votes

Interrogez Mongodb sur le mois, le jour, l'année... d'une date/heure

J'utilise mongodb et je stocke la datetime dans ma base de données de cette manière

pour une date "17-11-2011 18:00" je stocke :

 date = datetime.datetime(2011, 11, 17, 18, 0)
db.mydatabase.mycollection.insert({"date" : date})

je voudrais faire une demande comme ça

 month = 11
db.mydatabase.mycollection.find({"date.month" : month})

ou

 day = 17
db.mydatabase.mycollection.find({"date.day" : day})

quelqu'un sait comment faire cette requête ?

55voto

DrColossos Points 7903

Les dates sont stockées dans leur format d'horodatage. Si vous voulez tout ce qui appartient à un mois spécifique, recherchez le début et la fin du mois.

 var start = new Date(2010, 11, 1);
var end = new Date(2010, 11, 30);

db.posts.find({created_on: {$gte: start, $lt: end}});
//taken from http://cookbook.mongodb.org/patterns/date_range/

12voto

RubyTuesdayDONO Points 492

que diriez-vous de stocker le mois dans sa propre propriété puisque vous devez l'interroger ? moins élégant que $where , mais probablement plus performant car il peut être indexé.

10voto

Ujjwal Ojha Points 1320

Si vous souhaitez rechercher des documents appartenant à un mois spécifique, assurez-vous d'effectuer une requête comme ceci :

 // Anything greater than this month and less than the next month
db.posts.find({created_on: {$gte: new Date(2015, 6, 1), $lt: new Date(2015, 7, 1)}});

Évitez autant que possible de demander comme ci-dessous.

 // This may not find document with date as the last date of the month
db.posts.find({created_on: {$gte: new Date(2015, 6, 1), $lt: new Date(2015, 6, 30)}});

// don't do this too
db.posts.find({created_on: {$gte: new Date(2015, 6, 1), $lte: new Date(2015, 6, 30)}});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X