首页 > 解决方案 > 无法识别的管道阶段名称:'$unwind'

问题描述

我正在尝试使用此数组进行聚合:

[
            [
                '$match' => ['deck_id' => 18],
            ],
            [
                '$project' => [
                    'stack' => 1,
                ]
            ],
            [
                '$unwind' => '$stack'
            ],
            [
                '$group' => [
                    '_id' => '$stack.response',
                    'responses' => [
                        '$push' => '$$ROOT.stack'
                    ]
                ]
            ],
            [
                '$project' => [
                    'responses_count' => ['$size' => '$responses']
                ]
            ]
        ]

但我收到以下异常: 无法识别的管道阶段名称:'$unwind'

我还在 GitHub 中创建了一个带有此错误的问题。我正在使用 mongodb 4 和来自 pecl 的最新 mongodb 扩展。

https://github.com/mongodb/mongo-php-driver/issues/935

例如,以下查询在 Mongo 客户端上正常工作,但在 PHP 中却不行:

db.getCollection('game_statistics').aggregate([
    {$match: {deck_id: 18}},
    {$project: {stack: 1}},
    {$unwind: "$stack"},
    {$group: {_id: "$stack.response", responses: {$push: "$$ROOT.stack"}}},
    {$project: {responses_count: {'$size': "$responses"}}}
])

标签: mongodbphp-mongodb

解决方案


问题就在我这边。即使代码是正确的,驱动程序正在考虑的数组键或值中仍有一系列不可见的 UTF8 字符。用 VIM 打开那个文件可以让我看到这些字符并删除它们。 https://jira.mongodb.org/browse/PHPLIB-396


推荐阅读