2015-12-24 207 views
0

我使用下面的版本是:插入MongoDB的ISODate PHP

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

當我在尋找安裝MongoDB的PHP驅動程序here我注意到,名爲「蒙哥」的司機已被棄用,並着手按照規定鏈接來安裝新的擴展名「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 Driver?
  • 是否有PHP本地方法來創建一個類型爲ISODate的日期?

我應該考慮將我的MongoDB版本降級到3.0,以便我可以使用現有的Mongo Driver?

這是我一直在努力,都無濟於事,下面將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'));

+0

嘗試var_dump(extension_loaded('mongodb'));並看看輸出是什麼。 – Nikhil

+0

@Nikhil這將返回True –

回答

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

此代碼適用於我。