Ich weiß, dass ObjectIds das Datum enthalten, an dem sie erstellt wurden. Gibt es eine Möglichkeit, diesen Aspekt der ObjectId abzufragen?
javascript
mongodb
Zach
quelle
quelle
Antworten:
Das Einfügen von Zeitstempeln in ObjectIds behandelt Abfragen, die auf in der ObjectId eingebetteten Daten basieren, ausführlich.
Kurz im JavaScript-Code:
quelle
~/.mongorc.js
Datei speichern, damit sie beimmongo
Start der Shell verfügbar ist.ObjectId(hexSeconds + "0000000000000000");
zudb.ObjectID.createFromHexString(hexSeconds + "0000000000000000");
ObjectId()
:require('mongoose').Types.ObjectId()
- Worequire('mongoose')
befindet sich Ihre initialisierte / konfigurierte Mongoose-Instanz?Mit der integrierten Funktion, die von Mongodb-Treibern in Node.js bereitgestellt wird, können Sie nach einem beliebigen Zeitstempel abfragen:
Um vor der aktuellen Zeit nach Datensätzen zu suchen, können Sie alternativ einfach Folgendes tun:
Quelle: http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html
quelle
In
pymongo
kann es so gemacht werden:quelle
pymongo
Abhängigkeit zu verwenden:epoch_time_hex = format(int(time.time()), 'x')
(Vergessen Sie nicht, Nullen für Ihre Abfrage anzuhängen.) Das Zeitpaket wurde verwendet (import time
).Da die ersten 4 Bytes einer ObjectId einen Zeitstempel darstellen , müssen Sie Ihre Sammlung einfach nach ID sortieren , um Ihre Sammlung chronologisch abzufragen:
Nachdem Sie die Dokumente erhalten, können Sie den von ObjectId erhalten Generationszeit etwa so:
quelle
So finden Sie Find the Command (dieses Datum [2015-1-12] bis zu diesem Datum [2015-1-15]):
Zählen Sie den Befehl (dieses Datum [2015-1-12] bis zu diesem Datum [2015-1-15]):
Entfernen Sie den Befehl (dieses Datum [2015-1-12] bis zu diesem Datum [2015-1-15]):
quelle
Mit der
$convert
Funktion können Sie das Datum ab der Version 4.0 aus ObjectId extrahieren.Etwas wie
Sie können das Datum abfragen, indem Sie die Start- und Endzeit für das Datum vergleichen.
ODER
Sie können die Kurzschrift verwenden
$toDate
, um dasselbe zu erreichen.quelle
Um die letzten 60 Tage alten Dokumente in der Mongo-Sammlung zu erhalten, habe ich die folgende Abfrage in der Shell verwendet.
quelle
Wenn Sie eine Bereichsabfrage durchführen möchten, können Sie dies wie in diesem Beitrag tun . Zum Beispiel Abfragen für einen bestimmten Tag (dh 4. April 2015):
quelle
Aus der Dokumentation:
Auf diese Weise haben Sie ein Datum, das ein ISODAT ist.
Schauen Sie sich http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Extractinsertiontimesfromidratherthanhavingaseparatetimestampfield an . für mehr Informationen
quelle
Mit MongoObjectID sollten Sie auch die unten angegebenen Ergebnisse finden
quelle
In Schienen können
mongoid
Sie mit abfragenquelle