【发布时间】:2014-10-04 06:15:12
【问题描述】:
我正在尝试使用 Doctrine ODM 与我的 mongo 数据库进行交互,并且我正在尝试使用在 MongoDB CLI 中运行没有问题的这个 mongo 查询:
db.products.aggregate(
[
{
$match: {highEndEmployees: {$lt: 2001 }, lowEndEmployees: {$gt: 1400} }
},
{
$project: {
lowEndFinalPrice: {
$add: [
{ $multiply: ["$priceMultiplierUser", "$lowEndUsers"] },
{ $multiply: ["$priceMultiplierEmployee", "$lowEndEmployees"] },
{ $multiply: ["$priceMultiplierJobOpenings", "$lowEndJobOpenings"] },
"$priceBase"
]
},
pricePerUser: {$multiply: ["$priceMultiplierUser", "$lowEndUsers"]},
pricePerEmployee: {$multiply: ["$priceMultiplierEmployee", "$lowEndEmployees"]},
pricePerJobOpening: {$multiply: ["$priceMultiplierJobOpenings", "$lowEndJobOpenings"]},
}
},
{
$sort: { lowEndFinalPrice: 1 }
}
]);
在 Doctrine ODM 中,该查询将转换为:
array(
"aggregate" => "products",
"pipeline" => array(
array('$match' =>
array(
"highEndEmployees" => array('$lt' => 2001),
"lowEndEmployees" => array('$gt'=> 1400)
)
),
array('$project' => array(
'lowEndFinalPrice' => array(
'$add' => '$priceBase',
'$add' => array(
'$multiply' => array('$priceMultiplierUser', '$lowEndUsers')
)
)
))
)
)
);
但如果我尝试运行该查询,则会收到以下错误:
exception: the $add operator does not accept an object as an operand
但是,如果我删除这一行:
'$add' => array(
'$multiply' => array('$priceMultiplierUser', '$lowEndUsers')
)
从数组中,查询完美运行。因此,当我尝试在 $add 键中嵌套另一个数组时,我正在使用 mongo 抱怨的那个。
在 PHP+Doctrine ODM 中编写上述查询的正确方法是什么?
【问题讨论】:
标签: mongodb symfony doctrine-orm doctrine-odm