Je sais que les ObjectIds contiennent la date à laquelle ils ont été créés. Existe-t-il un moyen d'interroger cet aspect de l'ObjectId?
javascript
mongodb
Zach
la source
la source
Réponses:
L'ajout d'horodatages dans ObjectIds couvre les requêtes basées sur les dates intégrées dans ObjectId de manière très détaillée.
Brièvement en code JavaScript:
la source
~/.mongorc.js
fichier pour l'avoir disponible au démarrage dumongo
shell.ObjectId(hexSeconds + "0000000000000000");
pourdb.ObjectID.createFromHexString(hexSeconds + "0000000000000000");
ObjectId()
par:require('mongoose').Types.ObjectId()
- oùrequire('mongoose')
est votre instance de Mongoose initialisée / configurée.L'utilisation de la fonction intégrée fournie par les pilotes mongodb dans Node.js vous permet d'interroger par n'importe quel horodatage:
Sinon, pour rechercher des enregistrements avant l'heure actuelle, vous pouvez simplement faire:
Source: http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html
la source
Dans
pymongo
, cela peut être fait de cette façon:la source
pymongo
dépendance:epoch_time_hex = format(int(time.time()), 'x')
(n'oubliez pas d'ajouter des zéros pour votre requête) Le package de temps a été utilisé (import time
).Étant donné que les 4 premiers octets d'un ObjectId représentent un horodatage , pour interroger votre collection chronologiquement, triez simplement par id:
Après avoir obtenu les documents, vous pouvez obtenir le temps de génération de l'ObjectId comme suit:
la source
Comment trouver la commande (de cette date [2015-1-12] à cette date [2015-1-15]):
Comptez la commande (de cette date [2015-1-12] à cette date [2015-1-15]):
Supprimez la commande (de cette date [2015-1-12] à cette date [2015-1-15]):
la source
Vous pouvez utiliser la
$convert
fonction pour extraire la date d'ObjectId à partir de la version 4.0.Quelque chose comme
Vous pouvez interroger la date en comparant l'heure de début et de fin pour la date.
OU
Vous pouvez utiliser la sténographie
$toDate
pour obtenir la même chose.la source
Pour obtenir des documents vieux de 60 jours dans la collection mongo, j'ai utilisé la requête ci-dessous dans le shell.
la source
Si vous souhaitez effectuer une requête de plage, vous pouvez le faire comme dans cet article . Par exemple, interroger un jour spécifique (par exemple, le 4 avril 2015):
la source
De la documentation:
de cette façon, vous avez une date qui est un ISODate.
Regardez http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Extractinsertiontimesfromidratherthanhavingaseparatetimestampfield . pour plus d'informations
la source
En utilisant MongoObjectID, vous devriez également trouver les résultats comme indiqué ci-dessous
la source
Dans les rails,
mongoid
vous pouvez interroger en utilisantla source