Как мне сгруппировать на dbref в MongoDB с Doctrine

Я хочу сделать запрос агрегации, где я могу сгруппировать по 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', Как я могу сделать этот запрос?

1

Решение

После долгих поисков я нашел это Жучок на моногдб джира который имеет дело в основном с этим / похожим вопросом.

последний комментарий на этом тикете предлагается обходной путь для решения проблемы в виде кода командной строки. Я взял это решение и встроил его в запрос агрегации, который решил мою проблему.

$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();

Этот запрос дает мне правильный и ожидаемый результат.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector