mongodb - 无法识别的管道阶段名称:'$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"}}}
])
解决方案
问题就在我这边。即使代码是正确的,驱动程序正在考虑的数组键或值中仍有一系列不可见的 UTF8 字符。用 VIM 打开那个文件可以让我看到这些字符并删除它们。 https://jira.mongodb.org/browse/PHPLIB-396
推荐阅读
- oracle - 如果服务器使用端口黑客攻击,则使用 sql 开发人员连接到 oracle
- spring - 休眠 5 SQLServer 方言
- python - 如何用边距做 numpy logical_and?
- scala - keyBy 和 sum 两次是什么问题
- laravel - 在 Laravel Mix 中添加 ES6 到 ES5 转译器
- arrays - 在 groovy 中创建日期数组
- javascript - 如何在 render 方法中拆分 url?
- gitlab - 无法从脚本注册 gitlab runner?
- javascript - 如何根据 JSON 文件中的布尔值自动更改文本
- python - 我如何训练不同体积的 kears 模型