我想进行聚合查询,我可以通过dbref进行分组。这就是我尝试过的。
$aggregation = array(
array(
'$group' => array(
'_id' => '$foreign.$id',
'doc' => array(
'$last' => '$$ROOT'
)
)
),
array(
'$sort' => array(
'date' => -1
)
)
);
return $this->getDocumentManager()->getDocumentCollection('AppBundle:Collection')->aggregate($aggregation)->toArray();
但是这次尝试失败了,因为您不允许在$
中使用第二个'$foreign.$id'
符号。我该怎么做这个查询?
答案 0 :(得分:1)
经过大量搜索,我发现这个Bug Ticket on the monogdb Jira基本上处理了这个/类似的问题。
此票证上的last comment提供了一种解决方法,可以将此问题作为命令行代码解决。我已经采用这个解决方案并将其构建成一个解决我问题的聚合查询。
$aggregation = array(
array(
'$addFields' => array(
'foreignId' => array(
'$arrayToObject' => array(
'$map' => array(
'input' => array(
'$objectToArray' => '$foreign'
),
'in' => array(
'k' => array(
'$cond' => array(
array(
'$eq' => array(
array(
'$substrCP' => array(
'$$this.k', 0, 1
)
),
array(
'$literal' => '$'
)
)
),
array(
'$substrCP' => array(
'$$this.k',1,['$strLenCP' => '$$this.k']
)
),
'$$this.k'
)
),
'v' => '$$this.v'
)
)
)
)
)
),
array(
'$group' => array(
'_id' => '$foreignId',
'doc' => array(
'$last' => '$$ROOT'
)
)
),
array(
'$sort' => array(
'date' => -1
)
)
);
$this->getDocumentManager()->getDocumentCollection('AppBundle:Collection')->aggregate($aggregation)->toArray();
此查询为我提供了正确和预期的结果。