MongoDB组由不同的排序组合在一起

时间:2015-03-02 05:54:41

标签: php mongodb mapreduce mongodb-query aggregation-framework

我有像这样的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”和max“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”。 任何人都可以建议我这样做的最佳方式。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您最好使用.aggregate()来执行此操作。它也是现代版本驱动程序中集合对象的直接方法:

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

.distinct()命令仅在单个字段上运行。其他形式需要您评估的JavaScript评估,并且运行速度比本机代码慢得多。