J'ai essayé de stocker des tweets dans mongodb, chaque objet ressemble à ceci:
{
"_id" : ObjectId("4c02c58de500fe1be1000005"),
"contributors" : null,
"text" : "Hello world",
"user" : {
"following" : null,
"followers_count" : 5,
"utc_offset" : null,
"location" : "",
"profile_text_color" : "000000",
"friends_count" : 11,
"profile_link_color" : "0000ff",
"verified" : false,
"protected" : false,
"url" : null,
"contributors_enabled" : false,
"created_at" : "Sun May 30 18:47:06 +0000 2010",
"geo_enabled" : false,
"profile_sidebar_border_color" : "87bc44",
"statuses_count" : 13,
"favourites_count" : 0,
"description" : "",
"notifications" : null,
"profile_background_tile" : false,
"lang" : "en",
"id" : 149978111,
"time_zone" : null,
"profile_sidebar_fill_color" : "e0ff92"
},
"geo" : null,
"coordinates" : null,
"in_reply_to_user_id" : 149183152,
"place" : null,
"created_at" : "Sun May 30 20:07:35 +0000 2010",
"source" : "web",
"in_reply_to_status_id" : {
"floatApprox" : 15061797850
},
"truncated" : false,
"favorited" : false,
"id" : {
"floatApprox" : 15061838001
}
Comment pourrais-je écrire une requête qui vérifie le created_at et trouve tous les objets entre 18:47 et 19:00? Dois-je mettre à jour mes documents pour que les dates soient stockées dans un format spécifique?
2010-04-29T00:00:00.000Z
est beaucoup plus facile de définir votre plage de départ que de calculer la même date / heure en millisecondes. Vous pouvez également effectuer une conversion de fuseau horaire assez facilement. De plus, les dates gèrent déjà des choses comme les jours bissextiles, les secondes bissextiles et d'autres bizarreries que vous ne voulez généralement pas gérer vous-même.Réponses:
Interroger une plage de dates (mois ou jour spécifique)dans lelivre de recettes MongoDBa une très bonne explication à ce sujet, mais ci-dessous, j'ai essayé moi-même et cela semble fonctionner.Sur la base de mes expériences, vous devrez sérialiser vos dates dans un format pris en charge par MongoDB, car les éléments suivants ont donné des résultats de recherche indésirables.
Dans le deuxième exemple, aucun résultat n'était attendu, mais il y en avait toujours un. En effet, une comparaison de chaîne de base est effectuée.
la source
Clarifier. Ce qu'il faut savoir, c'est que:
Voici un extrait de code de travail, où nous faisons un peu de manipulation de date pour garantir que Mongo (ici j'utilise le module mangouste et souhaite des résultats pour les lignes dont l'attribut date est inférieur à (avant) la date donnée comme paramètre myDate) peut gérer correctement:
la source
MongoDB stocke en fait le millis d'une date en tant qu'int (64), comme prescrit par http://bsonspec.org/#/specification
Cependant, cela peut devenir assez déroutant lorsque vous récupérez des dates car le pilote client instanciera un objet date avec son propre fuseau horaire local. Le pilote JavaScript de la console mongo le fera certainement.
Donc, si vous vous souciez de vos fuseaux horaires, assurez-vous de savoir ce que c'est censé être lorsque vous le récupérez. Cela ne devrait pas avoir autant d'importance pour les requêtes, car cela équivaudra toujours au même int (64), quel que soit le fuseau horaire de votre objet date (j'espère). Mais je ferais certainement des requêtes avec des objets de date réels (pas des chaînes) et laisserais le pilote faire son travail.
la source
Python et
pymongo
Recherche d'objets entre deux dates en Python avec
pymongo
en collectionposts
(basé sur le tutoriel ):Où
{"$gte": from_date, "$lt": to_date}
spécifie la plage en termes dedatetime.datetime
types.la source
Remplacer
collection
par le nom de la collection que vous souhaitez exécuter la requêtela source
Utilisez ce code pour rechercher l'enregistrement entre deux dates à l'aide de
$gte
et$lt
:la source
Utilisation avec Moment.js et les opérateurs de requête de comparaison
la source
Convertissez vos dates en fuseau horaire GMT lorsque vous les placez dans Mongo. De cette façon, il n'y a jamais de problème de fuseau horaire. Ensuite, faites le calcul sur le champ Twitter / fuseau horaire lorsque vous retirez les données pour la présentation.
la source
Pourquoi ne pas convertir la chaîne en un entier de la forme YYYYMMDDHHMMSS? Chaque incrément de temps créerait alors un entier plus grand, et vous pouvez filtrer sur les entiers au lieu de vous soucier de la conversion en temps ISO.
la source
utilisez $ gte et $ lte pour trouver entre les données de date dans mongodb
la source
Vous pouvez également vérifier cela. Si vous utilisez cette méthode, utilisez la fonction d'analyse pour obtenir des valeurs de la base de données Mongo:
la source
la source
Vous pouvez également vérifier cela ou essayer au lieu d'utiliser l'agrégat
la source
j'ai essayé dans ce modèle selon mes besoins j'ai besoin de stocker une date chaque fois qu'un objet est créé plus tard je veux récupérer tous les enregistrements (documents) entre deux dates dans mon fichier html j'utilisais le format suivant mm / jj / aaaa
dans mon fichier py (python) je l'ai converti en "iso fomate" de la manière suivante
et enregistré dans ma collection dbmongo avec "SelectedDate" comme champ dans ma collection
récupérer des données ou des documents entre 2 dates que j'ai utilisées après la requête
la source