我使用jenssegers
驱动程序在laravel中使用mongodb,我在db中有3个这样的文档
{
"_id" : ObjectId("594dd540bb7de924c0005583"),
"cliente" : "Luis",
"tipo" : "Luis",
"paquete" : "Luis",
"fecha" : null,
"fechaE" : null,
"content" : "fotos",
"precio" : NumberInt(200),
"estatus" : NumberInt(2),
"Abonos" : [
{
"Monto" : NumberInt(200),
"Fecha" : null
},
{
"Monto" : NumberInt(2000),
"Fecha" : null
},
{
"Monto" : NumberInt(2000),
"Fecha" : null
}
],
"updated_at" : ISODate("2017-06-24T02:58:08.000+0000"),
"created_at" : ISODate("2017-06-24T02:58:08.000+0000")}
我使用这个Raw查询来获取所有" monto"的que $sum
每份文件(3份文件)。
public function updatearray(Request $request, $id){
$works = new work;
$result = Work::raw(function($collection)
{
return $collection->aggregate(array(
array('$unwind' => '$Abonos'),
array('$group' =>
array( "_id" => '$_id',"Monto" => array('$sum' => '$Abonos.Monto'))),
));
});}
我只想显示当前文档的结果,有没有办法可以匹配当前的$id
?
- 编辑 我从get方法获得id
public function abono($id){
$work = work::find($id);
return view('workabono', compact('work'));
}
这些是我使用的路线
Route::get('works/{work}/abono', [
'as' => 'works.abono', 'uses' => 'WorkController@abono']);
Route::put('works/{work}/', [
'as' => 'works.updateAbono', 'uses' => 'WorkController@updatearray']);
答案 0 :(得分:0)
你甚至不需要$unwind
。只需$match
和$project
:
public function updatearray(Request $request, $id){
$works = new work;
$result = Work::raw(function($collection) use($id)
{
return $collection->aggregate(array(
array('$match' => array( '_id' => $id) ),
array('$project' =>
array( "Monto" => array('$sum' => '$Abonos.Monto') )
)
));
});}
$sum
可以直接添加数组中的元素。
如果$id
是一个字符串,您可以明确地转换为ObjectId,
$id = new \MongoDB\BSON\ObjectID($id);