Php MongoDB中的计数
我在SQL中创建了此查询:Php MongoDB中的计数,php,mongodb,mapreduce,nosql,Php,Mongodb,Mapreduce,Nosql,我在SQL中创建了此查询: "SELECT code, name, count(*) FROM table WHERE customer = "XXX" GROUP BY code ORDER BY count(*) DESC; 我正在使用PHP,我必须为mongodb翻译这个SQL查询。我知道在mongodb中计算时,我必须这样做: $array_where_condition = array("customer" => "XXX"); $db->find($array_wher
"SELECT code, name, count(*) FROM table WHERE customer = "XXX" GROUP BY code ORDER BY count(*) DESC;
我正在使用PHP,我必须为mongodb翻译这个SQL查询。我知道在mongodb中计算时,我必须这样做:
$array_where_condition = array("customer" => "XXX");
$db->find($array_where_condition)->count();
但是我不明白如何编写像上面这样的查询。Mongo db不像sql那样有计数 mongodb中的Count与列表或数组中的Count更相似 我建议您在mongodb中小心使用计数,因为它们是缓慢的操作 我建议您不要像在sql中那样进行count,而是保留一个字段,其中保存列表的元素数量,而不要在每次需要列表中的元素数量时在该列表上使用count 编辑: 要获得您想要的结果,您需要使用映射/减少
但请记住,这是一个更慢的操作,不是为了实时使用,而是在周期性的后台运行任务中使用,您需要在客户端使用Map/Reduce函数和排序结果。请参阅此问题:如果您希望使用map reduce进行此类查询,那么您已经做错了 在这种情况下,MR将不会成为SQL聚合框架的性能替代品,也不会在您自己的应用程序中实时内联运行 但是,您可以使用聚合框架,这可能会提供您想要的性能。我对聚合框架有点生疏,这篇文章写得很快,但是这篇文章可能接近您的需要:
db.col.aggregate(
{$match: {customer: XXX}},
{$group:
{_id: "$code", name: "$name", count: {$sum: 1}}
}
)
以下是参考资料:
当然,解决这个问题最有效、最简单的方法是以NoSQL方式设计模式,以避免此类查询:我不知道您当前的模式,但如果您希望经常执行类似的查询,它可能不面向NoSQL。您所说的标准数据是什么意思?标题和标签是误导性的。。。你说得对,我加了几行,我希望现在更清楚这可能会对你有所帮助: