使用 PHP SDK 解析服务器聚合

Parse Server Aggregation using PHP SDK

我正在尝试在 Parse 的 PHP SDK 中构建聚合查询,但我卡在了 "lookup" 区域,我看到了一个关于此的 JS 示例,但它不起作用就我而言。

我有一个table的用户,其中包含一个"Tags"数组类型的字段,该数组实际上是一个指针数组,指向一个单独的标签class。

我想要实现的是根据使用情况列出最流行的标签,所以基本上我需要查询用户 class 并对数组中存在的标签进行分组,我已经实现了这个,但我坚持查找部分,查询当前 returns 一个标签指针数组,我想要的是提取这些指针的对象。

这是我目前拥有的:

$query = new ParseQuery('_User');
$pipeline = [
    'project' => ['tags' => 1],
    'unwind' => '$tags',
    'group' => [
        'objectId' => '$tags.objectId',
        'count' => ['$sum' => 1]
    ],
    'sort' => [ 'count' => -1],
    'limit' => 10,
];
try {
    return $query->aggregate($pipeline);
} catch (ParseException $ex) {
    return $ex->getMessage();
}

下面是 _User 集合的片段:

{ 
    "_id" : "5BuBVo2GD0", 
    "email" : "test@test.com", 
    "username" : "test@test.com", 
    "lastname" : "Doe", 
    "firstname" : "John", 
    "_created_at" : ISODate("2017-01-23T09:20:11.483+0000"), 
    "_updated_at" : ISODate("2019-02-15T02:48:30.684+0000"), 
    "tags" : [
        {
            "__type" : "Pointer", 
            "className" : "Tag", 
            "objectId" : "St2gzaFnTr"
        }, 
        {
            "__type" : "Pointer", 
            "className" : "Tag", 
            "objectId" : "LSVxAy2o74"
        }
    ], 
    "_p_country" : "CountrySE8J4HRBi", 
}

标签集合如下所示:

{ 
    "_id" : "St2gzaFnTr", 
    "name" : "Music", 
    "_created_at" : ISODate("2018-10-22T20:00:10.481+0000"), 
    "_updated_at" : ISODate("2018-10-22T20:00:10.481+0000")
}

如有任何帮助,我们将不胜感激!

提前致谢

不确定这是否是一个直接的答案,但这是一个针对频率的标签排序的有效聚合...

public function tagHistogram(Request $request, Response $response, array $args): Response {
        $pipeline = [
             'unwind' => '$tags' ,
             'sortByCount' => '$tags',
             'limit' => 1000,
        ];

        $query = new ParseQuery('Product');
        $result = $query->aggregate($pipeline);
        $result = array_map(
            function ($e) {
                $e['name'] = $e['objectId'];
                unset($e['objectId']);
                return $e;
            },
            $result
        );

        return $response->withJson($result);
    }