【问题标题】:Insert MongoDB ISODate PHP插入 MongoDB ISODate PHP
【发布时间】:2015-12-24 05:11:28
【问题描述】:

我正在使用以下版本:

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 驱动程序?

这是我尝试无济于事的,以下将向 Document 添加一个 Timestamp 类型的值,但似乎因为它不是 ISODate 类型,我无法强制执行 @987654322 @ 带有这个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() 功能,我不知道如何将其插入为 MongoDB 的 ISODate 类型:
date(DATE_ISO8601, date('U'));

【问题讨论】:

  • 试试 var_dump(extension_loaded('mongodb'));看看输出是什么。
  • @Nikhil 这返回 True

标签: php mongodb isodate mongodate


【解决方案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);

此代码对我有用。

【讨论】:

  • 看起来 UTCDateTime 实际上期望毫秒($orig_date-&gt;getTimestamp() 传递秒数)。所以你可以做$orig_date-&gt;getTimestamp() * 1000,或者更简单的是像这样传递DateTime对象:new MongoDB\BSON\UTCDateTime($orig_date);。文档在这里:php.net/manual/en/class.mongodb-bson-utcdatetime.php
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多