繁体   English   中英

PHP MongoDB驱动程序和聚合

[英]PHP MongoDB Driver and Aggregations

我是使用mongoDB和php的第一步,试图弄清楚聚合是如何工作的。 我对如何从命令行使用它们有一个大概的想法,但我正在尝试将其翻译为php驱动程序。 我正在使用餐厅dexample DB,像这样的记录列表

{
"_id" : ObjectId("59a5211e107765480896f3f8"),
"address" : {
    "building" : "284",
    "coord" : [
        -73.9829239,
        40.6580753
    ],
    "street" : "Prospect Park West",
    "zipcode" : "11215"
},
"borough" : "Brooklyn",
"cuisine" : "American",
"grades" : [
    {
        "date" : ISODate("2014-11-19T00:00:00Z"),
        "grade" : "A",
        "score" : 11
    },
    {
        "date" : ISODate("2013-11-14T00:00:00Z"),
        "grade" : "A",
        "score" : 2
    },
    {
        "date" : ISODate("2012-12-05T00:00:00Z"),
        "grade" : "A",
        "score" : 13
    },
    {
        "date" : ISODate("2012-05-17T00:00:00Z"),
        "grade" : "A",
        "score" : 11
    }
],
"name" : "The Movable Feast",
"restaurant_id" : "40361606"

}

我只想算一下有多少家餐厅可供选择,我正在做的是

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->myNewDb->restaurants;
$results = $collection->aggregate(
    [
        'name' => '$name'
    ],
    [
        '$group' => [
            'cuisine' => ['sum' => '$sum']
        ]
    ]
);

我得到这个错误

Fatal error: Uncaught exception 'MongoDB\Exception\InvalidArgumentException' 
with message '$pipeline is not a list (unexpected index: "name")'

任何想法? 我在php.net上找不到任何好的文档。

谢谢M

只要看一下文档 ,您就会看到管道必须作为数组传递。

aggregate方法接受两个参数$pipelines$optionspublic function aggregate(array $pipeline, array $options = []) )。

同样如前所述, $group必须具有_id元素。

按某些指定的表达式对文档进行分组,然后将每个不同的分组的文档输出到下一阶段。 输出文档包含一个_id字段,该字段按关键字包含不同的分组。 输出文档还可以包含计算字段,该字段包含按$ group的_id字段分组的某些累加器表达式的值。 $ group不订购其输出文档。

https://docs.mongodb.com/manual/reference/operator/aggregation/group/

因此,您的代码必须如下所示:

$results = $collection->aggregate([
    [
        '$group' => [
            '_id' => '$cuisine',
            'sum' => ['$sum' => 1],
            'names' => ['$push' => '$name']
        ]
    ]
]);

此代码按cuisine元素对文档进行分组,对项目进行计数并将所有name值收集到数组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM