Создание Mongo ObjectId (_id) с пользовательским временем?

Я переношу таблицу статей из MySQL в Mongo DB. Я понимаю, что поле _id, сгенерированное Mongo, каким-то образом содержит время создания, и его можно извлечь, или вы можете запросить его. Из-за этого я хочу использовать его, чтобы получить временную метку created_time INT из MySQL. Есть ли способ при перемещении моих данных сгенерировать _id для Mongo, который будет иметь отметку времени, которая у меня есть для моих записей в отдельном поле?


person Glitches    schedule 18.03.2013    source источник
comment
Вы можете найти это stackoverflow.com/questions/ 5125521/ обсуждение полезно.   -  person WiredPrairie    schedule 18.03.2013


Ответы (1)


Да, это возможно. Например, в драйвере C# есть конструктор для ObjectId, в который вы можете передать метку времени, см. этот исходный файл. Проще всего использовать вспомогательный метод GenerateNewId:

var id = ObjectId.GenerateNewId(new DateTime(2012, 01, 01));

Я не знаю, какой язык программирования вы используете и поддерживает ли драйвер этого языка эту функцию, но я думаю, что она широко доступна.

РЕДАКТИРОВАТЬ: Этот вопрос содержит код для Java, мангуста и питона, а ответ содержит код для PHP. «Широко доступный» кажется неверным предположением, например, он еще не реализован в драйвере PHP.

person mnemosyn    schedule 18.03.2013
comment
Ха, я на самом деле использую PHP. Не удивлен его ограничениями, но я не думал, что это будет иметь значение. Есть ли способ сгенерировать MongoId с использованием нового объекта DateTime(), отправив необработанный запрос в Mongo вместо использования драйвера для этого или альтернативного подхода для пользователей PHP? - person Glitches; 18.03.2013
comment
Ссылочный исходный файл перемещен. На сегодняшний день он находится по адресу: github.com/mongodb/mongo-csharp-driver/blob/master/src/ - person GaTechThomas; 24.08.2015