MongoDB には、ネイティブ MongoDB クエリで正常にクエリできるデータ モデルがあります。しかし、Doctrine MongoDB ODM の Query Builder API でそれらを表現することはできません。
これは私のモデルがMongoDBでどのように見えるかです(これはJSONコードの例です):
{ "name": "ArticleName",
"features": {
{ "type": "color",
...
"values": {
{ "value": "RED",
"label": "red",
....
},
{ "value": "GREEN",
"label": "green" }
}
},
{ "type": "width",
"values": {
{ "value": "40"}
}
}
}
}
さまざまな特徴と値の組み合わせを検索して記事を見つけたい。たとえば、color=green で width=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();
ただし、これは 1 つの条件のみを含むクエリになります。他の条件は上書きされるようです。これは、クエリ ビルダーによって生成されたクエリです。
db.articles.find({ "features": { "$elemMatch": { "type": "width", "values": { "$elemMatch": { "value": 40 } } } } })
MongoDB ODM クエリ ビルダー API を使用してユース ケースを解決する方法はありますか?