如何通过新的PHP pecl / mongodb驱动程序(1.1.2)和库使用MongoDB组函数


How to use the MongoDB group function via the new PHP pecl/mongodb driver (1.1.2) and library

新驱动程序:https://github.com/mongodb/mongo-php-driver

新库:https://github.com/mongodb/mongo-php-library

我已经成功选择了集合,列出了字段,设置了订单并使用了限制/跳过。

此语法的示例可以在库的测试中找到:https://github.com/mongodb/mongo-php-library/blob/master/tests/Collection/CrudSpec/FindFunctionalTest.php

但是,我正在努力找到有关如何通过 PHP 库使用 Mongos 分组函数的任何文档或语法示例。

我可以找到很多如何直接在MongoDB中以及通过以前的驱动程序和库"聚合"类执行此操作的示例,但不是通过这个新库。

似乎新的$collection->find()函数$options数组不接受组参数(与每个测试的排序、限制和批大小不同)。

PHP 库中似乎没有任何分组测试,但我现在使用的是 MongoDB''Collection::aggregate() 方法,该方法使用与传统驱动程序类似的语法。

示例语法:

<?php
$group_pipeline = [
    '$group' => [
        '_id' => [ 'event_type' => '$_id.eT' ],
        'total' => ['$sum' => 1 ],
    ],
];
$aggregation = $collection->aggregate([
    $match_pipeline,
    $group_pipeline,
    $sort_pipeline,
]);

旧驱动程序中的 group 方法只是"group"命令的快捷方式。新的驱动程序(和库)没有方法,但你仍然可以自己运行 group 命令。我们正在跟踪此帮助程序在 https://jira.mongodb.org/browse/PHPLIB-177 中添加的情况。

聚合$group类似,可能建议使用它,因为它不通过 JavaScript。我们的文档对此进行了说明:

由于 db.collection.group() 使用 JavaScript,因此它受到许多性能限制。在大多数情况下,聚合管道中的$group运算符提供了限制较少的合适替代方法。

原始组命令仍可使用以下命令运行:

$ns = "databasename.collectionname";
$cmd = new 'MongoDB'Driver'Command( [
    'group' => [
        'ns' => $ns,
        'key' => $key, // (or '$keyf' if you're passing in a MongoCode object)
        '$reduce' => $reduce,
        'cond' => $cond, // optional, and "condition" option in the old driver
        'finalize' => $finalize, // optional
    ]
] );
$manager->executeCommand( $ns, $cmd );

$manager可以与新扩展一起使用,但新库尚无权访问它(在 https://jira.mongodb.org/browse/PHPLIB-186 中跟踪)