插入 MongoDB ISODate PHP
Insert MongoDB ISODate PHP
我正在使用以下版本:
PHP -> 5.6.11
MongoDB -> 3.2
MongoDB PHP Driver -> 1.1
当我想要安装 MongoDB PHP 驱动程序时 here 我注意到名为“Mongo”的驱动程序已被弃用并继续遵循提供 link 以安装新扩展“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() 功能,我不知道如何将其作为 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);
这段代码适合我。
我正在使用以下版本:
PHP -> 5.6.11
MongoDB -> 3.2
MongoDB PHP Driver -> 1.1
当我想要安装 MongoDB PHP 驱动程序时 here 我注意到名为“Mongo”的驱动程序已被弃用并继续遵循提供 link 以安装新扩展“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() 功能,我不知道如何将其作为 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);
这段代码适合我。