Ich habe eine Sammlung, die wie folgt aussieht:MongoDB: Führen Sie einen Datumsbereich Abfrage aus der ObjectId im Mongo Mantel
{
_id: ObjectId("50a68673476427844b000001"),
other fields
}
Ich möchte eine Bereichsabfrage tun Datensätze zwischen zwei Terminen zu finden. Ich weiß, dass ich das Datum aus dem ObjectId im Mongo Mantel var dies zu tun bekommen:
var aDate = ObjectId().getTimestamp()
aber es ist keine Art und Weise (soweit ich im Moment herausfinden kann) eine ObjectId zu schaffen, bestehend nur der Zeitstempel Teil - ich glaube, meine ideale Lösung ist nicht funktionierende mongo Shell-Code wäre:
var minDate = ObjectId(new Date("2012-11-10"));
var maxDate = ObjectId(new Date("2012-11-17"));
Verwenden Sie den Fund mit dem minDate und MaxDate wie die Bereichswerte.
Gibt es eine Möglichkeit, dies in der Shell zu tun - ich bin nicht an einigen der Treiberprodukte interessiert.
Erste 8 Bytes von Mongoid sind Zeitstempel in Hexadezimal, so dass Sie eine gültige ObjectId mit ersten 8 Bytes aus Datum erstellt, und nur Nullen und dann Fragen wie folgt: '{ \t _id: {$ gt: ObjektId (" 5087e5b106cffca815000000 ")} }' –
Es gibt eine gute Antwort für [Kann ich MongoDB ObjectId nach Datum abfragen?] (http: // stackoverflow. com/questions/8749971/can-i-query-mongodb-objectid-by-date), das eine 'objectIdWithTimestamp()' JavaScript-Funktion enthält. Sie können diese Funktion in Ihrer [.mongorc.js] (http://www.mongodb.org/display/DOCS/Overview+-+The+MongoDB+Interactive+Shell#Overview-TheMongoDBInteractiveShell-mongorc.js) speichern Es ist beim Start in Ihrer 'mongo'-Shell verfügbar. – Stennie