我一直在尝试使用PHP变量从mongoDB数据库中获取结果。
这有效:
//create Mongo connection
$m = new MongoClient();
//Select db
$db = $m->warehouse;
//create collection
$fact = $db->fact;
$res = $fact->aggregate([
array(
'$match'=>array(
'day'=>array('$gte'=>3,'$lte'=>28),
'month'=>array('$gte'=>3,'$lte'=>3),
'year'=>array('$gte'=>2017,'$lte'=>2017)
)
),
array(
'$group'=>array(
'_id'=>array(
'month'=>'$month',
'day'=>'$day',
'year'=>'$year'
),
'totalSales'=>array('$sum'=>'$sale'),
'totalCost'=>array('$sum'=>'$total_cost')
)
),
array(
'$project'=>array(
'_id'=>0,
'totalSales'=>1,
'totalCost'=>1,
'totalProfit'=>array(
'$subtract'=>['$totalSales','$totalCost']
)
)
)
]);
var_dump($ res)的输出:
array (size=3)
'waitedMS' => int 0
'result' =>
array (size=1)
0 =>
array (size=3)
'totalSales' => float 440
'totalCost' => float 350
'totalProfit' => float 90
'ok' => float 1
但是当我尝试用php变量替换数字时:
$res = $fact->aggregate([
array(
'$match'=>array(
'day'=>array('$gte'=>$dayfrom,'$lte'=>$dayto),
'month'=>array('$gte'=>$monthfrom,'$lte'=>$monthto),
'year'=>array('$gte'=>$yearfrom,'$lte'=>$yearto)
)
),
array(
'$group'=>array(
'_id'=>array(
'month'=>'$month',
'day'=>'$day',
'year'=>'$year'
),
'totalSales'=>array('$sum'=>'$sale'),
'totalCost'=>array('$sum'=>'$total_cost')
)
),
array(
'$project'=>array(
'_id'=>0,
'totalSales'=>1,
'totalCost'=>1,
'totalProfit'=>array(
'$subtract'=>['$totalSales','$totalCost']
)
)
)
]);
我没有收到任何结果:
array (size=3)
'waitedMS' => int 0
'result' =>
array (size=0)
empty
'ok' => float 1
我在这里做错了什么?我已经尝试了几个方法,比如将PHP变量放在单引号下或者尝试将部分查询放入字符串中,并使用这些字符串重新构建查询,但除了硬编码数字到聚合外似乎没有任何工作。知道这里发生了什么吗?
编辑:(这就行了) 尝试在PHP类构造函数中初始化变量,该构造函数显式指定值来自PHP变量:
class DateSet {
public $df;
public $dt;
public $mf;
public $mt;
public $yf;
public $yt;
function __construct( $df, $dt, $mf, $mt, $yf, $yt) {
$this->df = $df;
$this->dt = $dt;
$this->mf = $mf;
$this->mt = $mt;
$this->yf = $yf;
$this->yt = $yt;
}
};
$dateobj = new DateSet($dayfrom,$dayto,$monthfrom,$monthto,$yearfrom,$yearto);
$res = $fact->aggregate([
array(
'$match'=>array(
'day'=>array('$gte'=>$dateobj->df,'$lte'=>$dateobj->dt),
'month'=>array('$gte'=>$dateobj->mf,'$lte'=>$dateobj->mt),
'year'=>array('$gte'=>$dateobj->yf,'$lte'=>$dateobj->yt)
)
),
array(
'$group'=>array(
'_id'=>array(
'month'=>'$month',
'day'=>'$day',
'year'=>'$year'
),
'totalSales'=>array('$sum'=>'$sale'),
'totalCost'=>array('$sum'=>'$total_cost')
)
),
array(
'$project'=>array(
'_id'=>0,
'totalSales'=>1,
'totalCost'=>1,
'totalProfit'=>array(
'$subtract'=>['$totalSales','$totalCost']
)
)
)
]);
输出:
array (size=3)
'waitedMS' => int 0
'result' =>
array (size=7)
0 =>
array (size=3)
'totalSales' => float 640
'totalCost' => float 520
'totalProfit' => float 120
1 =>
array (size=3)
'totalSales' => float 8000
'totalCost' => float 6000
'totalProfit' => float 2000
2 =>
array (size=3)
'totalSales' => float 700
'totalCost' => float 600
'totalProfit' => float 100
3 =>
array (size=3)
'totalSales' => float 18000
'totalCost' => float 15000
'totalProfit' => float 3000
4 =>
array (size=3)
'totalSales' => float 6300
'totalCost' => float 6100
'totalProfit' => float 200
5 =>
array (size=3)
'totalSales' => float 68503
'totalCost' => float 55720
'totalProfit' => float 12783
6 =>
array (size=3)
'totalSales' => float 440
'totalCost' => float 350
'totalProfit' => float 90
'ok' => float 1