Вы можете использовать aggregation framework, чтобы получить сумму, и трубопровод агрегация, что дает вам, что результат будет что-то вроде этого:
db.task.aggregate([
{
"$unwind": "$time"
},
{
"$group": {
"_id": 0,
"total_estimated_time": {
"$sum": "$time.estimated_time_in_number"
}
}
}
])
, который даст вам выходного
/* 0 */
{
"result" : [
{
"_id" : 0,
"total_estimated_time" : 11.66
}
],
"ok" : 1
}
Чтобы реализовать это в laravel, используйте необработанный запрос следующим образом, который использует базовую структуру агрегации MongoDB a Бова и гораздо быстрее, а также в целом более эффективен, чем вы получите из нативного рамочного интерфейса:
Task::raw(function($collection){
return $collection->aggregate(array(
array('$unwind' => '$time'),
array('$group' => array(
"_id" => 0,
"total_estimated_time" => array('$sum' => '$time.estimated_time_in_number')
)),
));
});
- UPDATE -
Вы можете назначить переменные результат из запроса агрегации MongoDB следующим образом:
$result = DB::collection('tasks')->raw(function($collection)
{
return $collection->aggregate(array(
array('$unwind' => '$time'),
array('$group' => array(
"_id" => 0,
"total_estimated_time" => array('$sum' => '$time.estimated_time_in_number')
)),
));
});
Я понятия не имею, как написать необработанный запрос mongoDB. Так вы можете сказать мне, как добавить, где условие выше необработанный запрос. –
@GaurangGhinaiya Реализация прямо там, в ответе, присваивает оператор переменной. – chridam