Php 从MongoDB获取数据

Php 从MongoDB获取数据,php,mongodb,database,Php,Mongodb,Database,我有一个MongoDB集合,有很多项目。多个项具有相同的键vluesrkey,但其时间戳的值不同。我想通过srkey获取时间戳最大的所有项目。如何使用php MongoDB实现这一点 例如,“我的收藏”包含以下项目 收藏 item1 : {srkey:a,timestamp:1358675171} item2 : {srkey:b,timestamp:1358675175} item3 : {srkey:a,timestamp:1358676849} item4 : {srkey:d,times

我有一个MongoDB集合,有很多项目。多个项具有相同的键vluesrkey,但其时间戳的值不同。我想通过srkey获取时间戳最大的所有项目。如何使用php MongoDB实现这一点

例如,“我的收藏”包含以下项目

收藏

item1 : {srkey:a,timestamp:1358675171}
item2 : {srkey:b,timestamp:1358675175}
item3 : {srkey:a,timestamp:1358676849}
item4 : {srkey:d,timestamp:1358675213}
item5 : {srkey:b,timestamp:1358676111}
fetch的输出必须是

    item3 : {srkey:a,timestamp:1358676849}
    item4 : {srkey:d,timestamp:1358675213}
    item5 : {srkey:b,timestamp:1358676111}

第1项和第3项具有相同的srkey,所以结果只包含其中一个具有最大时间戳值的项。

您可以为此使用新的聚合框架:

$db->col->aggregate(array(
    array('$sort' => array('$timestamp' => -1)),
    array('$group' => array('_id' => '$srkey', 
        'timestamp' => array('$first' => '$timestamp')))
));

它应该是排序组中的第一个,因为您是以DESC方式排序的。

您能给我们举个例子说明您的意思吗?我无法从描述中完全理解这一点。我有一个没有项目的MongoDB集合-你想在空集合中使用find吗?我想你自己编辑我的问题时没有理解这个问题@Sammaye@HarishAnchu服务器错误是什么意思?你能发布实际的错误吗?@HarishAnchu打开PHP错误报告,它应该能捕捉致命错误和that@HarishAnchu我想知道,你在运行什么版本的驱动程序?你能做一个快速的phpinfo,看看mongo下的部分是怎么说的吗?@HarishAnchu Bam这是你的问题,聚合助手是在1.3中添加的,你可以使用命令来完成这项工作,但我建议你升级它只需要5分钟。这很好,再次感谢。但它只返回分组数组中指定的字段。我需要项目的所有字段。我的集合的项目中有更多字段。在我的示例中,我只指定了其中两个。