Я использую следующие версии:
PHP -> 5.6.11
MongoDB -> 3.2
MongoDB PHP Driver -> 1.1
Когда я искал установить PHP-драйвер MongoDB Вот Я заметил, что драйвер с именем «Mongo» устарел и перешел по предоставленной ссылке для установки нового расширения «MongoDB». Это будет упоминаться как php_mongodb. Так как я использую систему Windows, мне пришлось скопировать файл php_mongodb.dll
к моему ../php/ext
и добавил строку extension=php_mongodb.dll
на мой PHP.ini
Используя устаревший драйвер, я имел обыкновение вставлять MongoDate (), как показано ниже.
<?php
$connection = new MongoClient();
$database = $connection->selectDB('test');
$coll = new MongoCollection($database, 'users');
$coll->insert(
(object)array(
"createdAt" => new MongoDate()
)
);
?>
Проблема в том, что с новым php_mongodb этот MongoDate (), по-видимому, недоступен, я получаю сообщение об ошибке: Fatal error: Class 'MongoDate' not found
Должен ли я рассмотреть возможность понижения версии MongoDB до версии 3.0, чтобы я мог использовать устаревший драйвер Mongo?
Это то, что я пытался безрезультатно, следующее добавит значение типа Timestamp
к документу, однако, кажется, потому что это не тип ISODate
что я не могу обеспечить TTL с этим createdAt
поле:
<?php
require '/vendor/autoload.php';
$date = new MongoDB\BSON\Timestamp(1, date('U'));
$manager = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");
$collection = new MongoDB\Collection($manager, "test.users");
$ex = [
"createdAt" => $date
];
$result = $collection->insertOne( $ex );
?>
Еще одна вещь, которую я попробовал, это приведенная ниже дата, однако без функции MongoDate () я не знаю, как вставить это как тип ISODate
для MongoDB:
date(DATE_ISO8601, date('U'));
Не уверен, что тебе все еще это нужно, но я много боролся с этим. Наконец я смог понять это.
$orig_date = new DateTime('2016-01-22 14:00:00');
# or you can use any other way to construct with (int timestamp)
$mongo_date = new MongoDB\BSON\UTCDateTime($orig_date->getTimestamp());
$filter = [
....
....
['timestamp' => ['$gte' => $mongo_date]],
....
....
]
# create command (for example aggregation)
$cmd = new MongoDB\Driver\Command( $filter );
# execute command
$cursor = $manager->executeCommand('my_mongo_db_name', $cmd);
Этот код работает для меня.
Других решений пока нет …