当我升级到PHP7时,我从mongo移动到mongodb扩展.我唯一无法弄清楚的是通过id更新doc.Mongo曾经使用MongoId类来解析字符串中的id,但我找不到Mongodb的任何等价物.
这就是我所处的位置,哪些不起作用
$collection->updateOne(['_id' => '567eba6ea0b67b21dc004687'], ['$set' => ['some_property' => 'some_value']]);
Run Code Online (Sandbox Code Playgroud) 我正在努力从 mongodb 迁移到新的 php 驱动程序,此时我不知道问题到底是什么,查询在旧驱动程序中运行良好,实际上我没有收到任何查询或 php 错误。print_r 返回聚合 fn 的结果如下 php version : 7.1.18, Zend Engine : v3.1.0, mongo: v3.4.15
> MongoDB\Driver\Cursor Object (
> [database] => demoDb
> [collection] =>
> [query] =>
> [command] => MongoDB\Driver\Command Object
> (
> [command] => stdClass Object
> (
> [aggregate] => app_button
> [pipeline] => Array
> (
> [0] => stdClass Object
> (
> [$match] => stdClass Object
> (
> [location] => stdClass Object
> (
> …Run Code Online (Sandbox Code Playgroud) 我写了下面的代码行来获取查找中的一些特定字段,例如
$pipeline = array(
array(
'$match' => $query
),
array(
'$lookup' => array(
'from' => 'studentTbl',
'localField' => '_id',
'foreignField' => 'activity_details.activityId',
'pipeline' => [
['$project' => [ '_id' => 1.0, 'activity_details' => 1.0] ],
],
'as' => 'studentsOfActivities'
)
),
....
....
);
return $this->db->activitiesTbl->aggregate($pipeline)->toArray();
Run Code Online (Sandbox Code Playgroud)
基本上 studentTbl 有许多字段和嵌入的文档。在上面的代码中,我首先使用外部和本地字段通过查找获取,然后确定哪些字段应该投影到管道内。
上面的代码不起作用...请帮忙!!!
mongodb mongodb-php mongodb-query aggregation-framework php-mongodb
我为我的一些项目应用了appName,但在currentOp中,某些查询缺少它.大多数情况下,计数查询都缺少它.
{
"desc" : "conn1786739",
"threadId" : "140671499200256",
"connectionId" : 1786739,
"client" : "179.22.4.3:42354",
"active" : true,
"opid" : -1076773120,
"secs_running" : 6,
"microsecs_running" : NumberLong(6928801),
"op" : "command",
"ns" : "dbname.members",
"query" : {
"count" : "memebers",
"query" : {
"$or" : [
{
"$and" : [
{
"condition1" : {
"$gt" : 0
}
},
{
"condition1" : 0
},
]
}
],
},
"readConcern" : {
}
},
"numYields" : 28,
"locks" : {
"Global" : "r", …Run Code Online (Sandbox Code Playgroud) 我有以下格式的文档
{
"_id" : ObjectId("12e123123123123123"),
"client_id" : "12345667889",
"resource" : "test/test",
"version" : "v2",
"ts" : new Date("Wed, 02 Jan 2013 15:34:58 GMT +08:00")
}
Run Code Online (Sandbox Code Playgroud)
这ts是一个 MongoDate() 字段。
我正在尝试在 php 中使用 MongoDB 聚合函数按 client_id 和小时进行分组并计数使用情况以显示在表/图表中
这是我目前的尝试
$usage = $this->db->Usage->aggregate(array(array(
'$project' => array(
'hour' => array(
'years' => array( '$year' => '$ts' ),
'months' => array( '$month' => '$ts' ),
'days' => array( '$dayOfMonth' => '$ts' ),
'hours' => array( '$hour' => '$ts' ),
)
),
'$group' => array( …Run Code Online (Sandbox Code Playgroud) 该mongoPHP扩展赞成不赞成的mongodb扩展。此扩展名与一起使用mongo-php-library。
在旧扩展中,可以使用MongoCursor :: count()从光标获取结果计数。但是,新游标MongoDB \ Driver \ Cursor没有这种方法。对MongoDB执行查询后,从中获取结果数量的新方法是什么?
我已经添加mongodb.so了两个/etc/php5/apache2/php.ini,/etc/php5/cli/php.ini如下所示
extension=/usr/lib/php5/20100525/mongodb.so
Run Code Online (Sandbox Code Playgroud)
但我仍然收到以下错误Class 'MongoDate' not found。
PHP 版本 - PHP 5.4.45
以下是来自 php cli 的关于 mongodb 扩展的信息
php -i | grep -i mongodb
mongodb
MongoDB support => enabled
MongoDB extension version => 1.2.5
MongoDB extension stability => stable
mongodb.debug => no value => no value
Run Code Online (Sandbox Code Playgroud)
下面是phpinfo()在 apache2 下运行的for php的输出
我们有两台 MongoDB 服务器,一台是主服务器,另一台配置为副本。
我们使用 PHP 将更新列表批量写入 MongoDB。从服务器日志来看,我们在服务器日志中做了一些少量的“等待复制超时”的异常。
PHP代码的批量写入部分:
try {
$manager = new MongoDB\Driver\Manager("mongodb://" . DB_HOST);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 10000);
$result = $manager->executeBulkWrite($DBName . '.' . $collection, $bulk, $writeConcern);
return $result;
} catch (Exception $ee) {
AppendToLogFile(ERROR_Internal_Error, 'Script:' . __FILE__ . ', LINE:' . __LINE__ . ',$ee:' . $ee->getMessage());
continue;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!