使用 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);
}
我正在尝试在 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);
}