July 2, 2022
ObjectId в MongoDB содержит timestamp
На днях коллега пожаловался что ему нужно вытащить часть записей за определенный период, размером в день, из коллекции с много млн. записей. Прошлый разработчик не проставил индексов, потому даже его внуки не дождутся результата запроса.
Есть одна очень простая хитрость, даже скорее просто понимание основ. Первые 4 байта ObjectId это timestamp. Берете нужный вам период в timestamp, переводите в hex, остаток забиваете нулями, вот так: ObjectId('62c049650000000000000000').
Делаете запросы $gt, $lt, _id имеет индекс по умолчанию, так что проблем быть не должно.
https://www.mongodb.com/docs/manual/reference/method/ObjectId/