2014-11-04 2 views
0

Я использую учение 2, чтобы писать MongoDB и Entity выглядит следующим образом:Doctrine2 MongoDB и Отметка

{ 
    "_id" : ObjectId("54538be2516bd636738b46f2"), 
    "department" : "Assistance", 
    "action" : "DONE", 
    "idAppointment" : 2197, 
    "service_order" : "F4889109", 
    "access_number" : "164016178", 
    "so_type" : "DERA", 
    "stage" : "D40", 
    "id_va" : "FT452926", 
    "id_icms" : "F4889109", 
    "ref_isp" : "", 
    "comment" : "", 
    "first_available_schedule" : Timestamp(1414623600, 168), 
    "asap" : false, 
    "allday" : "NO", 
    "operator" : "HD8", 
    "created" : Timestamp(1414761442, 169) 
} 

Теперь я хочу, чтобы сделать запрос на метку времени либо с QueryBuilder или в командной строке, но я не Не знаю точно, как это сделать. Любая помощь будет оценена.

ответ

1

Для начала вам представляется, что тип BSON Timestamp, если вы действительно используете тип Date. В ODM они используют аннотации @Timestamp и @Date соответственно. В драйвере PHP соответствующие классы драйверов: MongoTimestamp и MongoDate, соответственно.

Как ссылка на документацию BSON выше состояний, временная метка предназначена для внутреннего использования (MongoDB использует ее в репликации oplog). Если вы сохраняете даты и время в своем приложении, время даты - это то, что вы должны использовать.

Рассматривая пример @Timestamp в документации ODM, весьма печально, что пример имеет его в поле $created. Нам бы лучше использовать менее вдохновляющее имя поля и добавить примечание о том, что пользователи, вероятно, не хотят отображать поле как @Timestamp.

Если у вас есть поля, отображаемые как @Date, вы должны иметь возможность использовать построитель запросов так же, как и с любым другим полем и оператором (относящимся к значению даты). При подготовке запроса DocumentPersister::prepareQueryOrNewObj() в конечном итоге выполнит значение запроса, соответствующее отображаемому по дате полем, через DateType::convertToDatabaseValue(). Это означает, что это значение может быть целым числом timestamp, DateTime или экземпляром MongoDate. Строка также подходит, если она работает с strtotime().

+0

Я пропустил эту главу, так что много. Теперь я должен обновить созданное поле до формата даты. Как бы вы предложили сделать это? С уважением – cwhisperer

+0

Это лучше всего сделать с помощью сценария миграции, который запрашивает миграцию документов с помощью оператора ['$ type'] (http://docs.mongodb.org/manual/reference/operator/query/type/) и обновлений каждый документ. Поскольку временные метки BSON и поля даты являются 64-битными целыми числами, вам не придется беспокоиться о том, что документы вообще растут (все обновления должны быть на месте). Сценарий PHP CLI должен делать эту работу просто отлично, и ее должно быть легко написать так, чтобы она могла забрать и возобновить миграцию, если вы ее прекратите раньше. – jmikola

Смежные вопросы