我有像这样的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”。 任何人都可以建议我这样做的最佳方式。 提前谢谢。
答案 0 :(得分:1)
您最好使用.aggregate()
来执行此操作。它也是现代版本驱动程序中集合对象的直接方法:
$result = $db->collection('Profit_and_loss')->aggregate(array(
array( '$group' => array(
'_id' => '$entity_id',
'year' => array( '$max' => '$year' )
))
));
.distinct()
命令仅在单个字段上运行。其他形式需要您评估的JavaScript评估,并且运行速度比本机代码慢得多。