我在 MongoDB 中有一个数据模型,我可以通过本机 MongoDB 查询成功查询。但是我无法使用 Doctrine MongoDB ODM 的查询生成器 API 来表达它们。
这就是我的模型在 MongoDB 中的样子(这是一些 JSON 代码示例):
{ "name": "ArticleName",
"features": {
{ "type": "color",
...
"values": {
{ "value": "RED",
"label": "red",
....
},
{ "value": "GREEN",
"label": "green" }
}
},
{ "type": "width",
"values": {
{ "value": "40"}
}
}
}
}
我想通过搜索不同的特征值组合来找到文章,例如我想找到一篇颜色=绿色和宽度=40的文章。
但是,我无法使用 Doctrine MongoDB ODM Query Builder API** 构建查询?这是我尝试过的:
# Document/ArticleRepository.php
$features = array('color'=>'RED', 'width'=>'40');
$qb = $this->createQueryBuilder('CatalogBundle:Article'); // I use symfony 2
foreach ($features as $type => $value)
{
$qb->field('features')->elemMatch(
$qb->expr()->field('type')->equals($type)->field('values')->elemMatch(
$qb->expr()->field('value')->equals($value)
)
);
}
return $qb->getQuery()->execute();
但是,这确实会导致查询,其中仅包含一个条件。另一个条件似乎被覆盖了。这是查询生成器生成的查询:
db.articles.find({ "features": { "$elemMatch": { "type": "width", "values": { "$elemMatch": { "value": 40 } } } } })
有没有办法使用 MongoDB ODM Query Builder API 解决我的用例?