Mongodb中的SUM()?查询问题?
Posted
技术标签:
【中文标题】Mongodb中的SUM()?查询问题?【英文标题】:SUM() in Mongodb? Issue with Query? 【发布时间】:2013-07-19 03:55:11 【问题描述】:我正在尝试从具有 SUM() 的 SQL 编写 php (Mongo) 查询,但我不确定我的语法是否正确。有人能启发我吗?
SQL:
$cmd = "SELECT SUM(m_length) FROM pkt_tbl WHERE m_time>=" . $time. " AND m_buffer_latency<=" . $time;
MongoDB 查询:
$find_projection= aggregate(array('$group'=>array('$sum'=>'$m_length')));
$result = $table -> command($find_projection);
我可以使用 array_sum 是 $result 还是在这种情况下我可以使用 $SUM (Aggregate)。任何帮助将不胜感激。
谢谢
【问题讨论】:
【参考方案1】:你应该试试aggregation
在php
这个代码可能对你有帮助,
<?php
$m = new Mongo;
$c = $m->selectDB("test")->selectCollection("zips");
$out = $c->aggregate(array(
'$group' => array(
'_id' => '$state',
'totalPop' => array('$sum' => '$pop')
)
),
array(
'$match' => array('totalPop' => array('$gte' => 10*1000*1000))
)
);
var_dump($out);
?>
Mongocollection Aggregate
【讨论】:
感谢您的意见。任何有关我的查询的建议将不胜感激。你能检查我的查询吗?我在 $result 中使用了 array_sum,我可以这样实现吗?array_sum
得到一个 array as a parameter
到 calculate the sum
就像 array_sum(array(2,4,8,6));
但检查你在其中传递了什么?将array('m_length' => 1)
传递给array_sum
有意义吗?阅读此php.net/manual/en/function.array-sum.php
hmm 我认为传递 $find_projection
是 array('m_length'=>1
将被视为一个数组(因为它是 array()) 。你能告诉我如何更改我的查询吗?
阅读此***.com/questions/8874671/… 和docs.mongodb.org/manual/reference/method/db.collection.group 可能会对您有所帮助。
好的。我尝试使用聚合,但仍然没有解决问题。有人可以检查我的语法吗? $find_projection= aggregate(array('$group'=>array('$sum'=>'$m_length')));
$result = $table -> command($find_projection)
【参考方案2】:
$result = $table->aggregate(
array('$match' => array(
'm_time' => array('$gte' => $max),
'm_buffer_latency' => array('$lte' => $max),
)),
array('$group' => array(
'_id' => true,
'sum_length' => array('$sum' => '$m_length')
))
);
这一切都解决了
【讨论】:
以上是关于Mongodb中的SUM()?查询问题?的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询