Вставьте MongoDB ISODate PHP

Я использую следующие версии:

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

  • Что эквивалентно этому при использовании нового драйвера php_mongodb?
  • Должен ли я рассмотреть возможность понижения версии MongoDB до 3.0, чтобы я мог использовать устаревший драйвер Mongo?
  • Есть ли PHP родной способ сделать дату типа ISODate?

Должен ли я рассмотреть возможность понижения версии 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'));

1 ответ

Решение

Не уверен, что тебе все еще это нужно, но я много боролся с этим. Наконец я смог понять это.

$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);

Этот код работает для меня.

Другие вопросы по тегам