MongoDB группы по отдельным видам вместе

У меня есть структура коллекций mongodb 1, как это-

{
"_id" : ObjectId("54d34cb314aa06781400081b"),
"entity_id" : NumberInt(440),
"year" : NumberInt(2011),

}
{
"_id" : ObjectId("54d34cb314aa06781400081e"),
"entity_id" : NumberInt(488),
"year" : NumberInt(2007),
}
{
"_id" : ObjectId("54d34cb314aa06781400081f"),
"entity_id" : NumberInt(488),
"year" : NumberInt(2008),
}
{
"_id" : ObjectId("54d34cb314aa067814000820"),
"entity_id" : NumberInt(488),
"year" : NumberInt(2009),
}
{
"_id" : ObjectId("54d34cb314aa067814000827"),
"entity_id" : NumberInt(489),
"year" : NumberInt(2009),
}

поэтому в выводе я хочу получить «entity_id» только с максимальным значением «year» (предположим, что с «488» entity_id «year» должно быть 2009).
я пытался написать запрос

$fin_cursor = $db->command(array(
"distinct" =>"Profit_and_Loss",
"key" =>'entity_id',
"query" => array(array('$and'=>$financial_pl_search_array),array('$sort'=>array("year"=>-1))),

));

в выводе я хочу 2 поля «entity_id» и «year».
Может кто-нибудь предложить мне лучший способ сделать это.
Заранее спасибо.

0

Решение

Вы лучше использовать .aggregate() сделать это. Это также прямой метод для объектов коллекции в современных версиях драйвера:

$result = $db->collection('Profit_and_loss')->aggregate(array(
array( '$group' => array(
'_id' => '$entity_id',
'year' => array( '$max' => '$year' )
))
));

.distinct() Команда работает только над одним полем. Другие формы требуют оценки JavaScript, как вы заметили, и работают значительно медленнее, чем собственный код.

1

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

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

По вопросам рекламы [email protected]