Если вы используете ReferenceMany или ReferenceOne, вы не можете выполнять запросы по любому полю ссылочного документа, кроме идентификатора ссылочного документа.
Если вам нужен запрос по code
из ссылочной коллекции, вы должны использовать EmbedMany
вместоReferenceMany
.
В этом случае ваш документ будет:
{
"_id": ObjectId("4d124cef3ffcf6f410000037"),
"code": "color",
"productTypes": [
{
"_id": ObjectId("4d120a2d2b8d8d3010000000"),
"code": "car"
}
]
}
И будет работать следующий запрос:
$query = $dm->createQuery('Cms\Model\Param');
$query->field('productTypes.code')->equals('car');
$result = $query->execute();
var_dump($result);
Кроме того, если ваш код ProductType уникален, выможете использовать его вместо MongoId
, в этом случае вы можете запросить $ id:
{
"_id": ObjectId("4d124cef3ffcf6f410000037"),
"code": "color",
"productTypes": [
{
"$ref": "productTypes",
"$id": 'car',
"$db": "test"
}
]
}
Ссылочный документ:
{
"_id": 'car'
}
Запрос:
$query->field('productTypes.$id')->equals('car');