插入MongoDB ISODate PHP

时间:2015-12-24 05:11:28

标签: php mongodb isodate mongodate

我使用以下版本:

PHP                -> 5.6.11  
MongoDB            -> 3.2  
MongoDB PHP Driver -> 1.1

当我想要安装MongoDB PHP驱动程序here时,我注意到驱动程序名为" 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类型的我我无法使用此createdAt字段强制执行TTL

<?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()功能我不知道如何将其作为MongoDB的类型ISODate插入:
date(DATE_ISO8601, date('U'));

1 个答案:

答案 0 :(得分:2)

不确定你是否仍然需要这个,但我一直在苦苦挣扎。最后我能够弄清楚。

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

此代码适用于我。