【问题标题】:limit,count,sort with distinct in mongodb using php使用php在mongodb中进行限制,计数,排序
【发布时间】:2013-10-03 11:00:19
【问题描述】:

如何在 mongo 中使用与 PHP 不同的限制、计数和排序?我正在使用 mongo 命令功能,代码如下:

$data_count= $mongoInstance>command(array("distinct"=>"collection","key"=>"key","query"=>$filter_query));

如何将计数、排序和限制与此相关联?

mongo 中有一些 aggeregate 框架,但我如何在 PHP 中使用它?

【问题讨论】:

标签: php mongodb nosql


【解决方案1】:

我相信您实际上是在寻找聚合框架。 distinct 命令的功能非常有限。您正在寻找的一个示例是:

$db->col->aggregate(array(
    array('$match'=>$filter_query)
    array('$group'=>array('_id'=>'$key', 'count'=>array('$sum'=>1))),
    array('$sort'=>array('_id'=>-1)),
    array('$skip'=>4),
    array('$limit'=>20)
));

更多参考可以在这里找到:http://docs.mongodb.org/manual/reference/aggregation/operator-nav/

【讨论】:

  • 谢谢@Sammaye。这是工作。还有一点帮助。我只需要知道总数,用于分页目的。我的意思是这只会选择 20 个值,我想知道有多少个独特的结果。
  • 还需要包含更多的字段来选择。我想我可以将它包含在 $project 中。我需要包括要选择的电子邮件、时间戳和事件字段。
  • @AlwinAugustin 我认为就像在 SQL 中一样,您可能需要执行两次查询才能获得总数,如果您需要更多字段,只需将它们包含到 $group 运算符中,例如 'email'=>'$email'
  • 谢谢。我知道了。现在当我给 array('$group'=>array('_id'=>'$email','email'=>'$email','timestamp'=>'$timestamp','event'=>' $event')) 它正在返回一个错误,上面写着 [errmsg] => 异常:组聚合字段“电子邮件”必须定义为对象内的表达式
  • @AlwinAugustin 糟糕,是的,它正在分组,请尝试:'email'=>array('$max'=>'$email'),如果您正在处理重复项,必须告诉 MongoDB 您想要什么值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多