我的“params”系列中有一个文档,如下所示:
{
"_id": ObjectId("4d124cef3ffcf6f410000037"),
"code": "color",
"productTypes": [
{
"$ref": "productTypes",
"$id": ObjectId("4d120a2d2b8d8d3010000000"),
"$db": "test"
}
]
}
参考文件是:
{
"_id": ObjectId("4d120a2d2b8d8d3010000000"),
"code": "car"
}
我正在使用DoctrineODM来获取引用“productType”为“car”的“param”文档。我正在使用此代码:
$query = $dm->createQuery('Cms\Model\Param');
$query->field('productTypes.code')->equals('car');
$result = $query->execute();
var_dump($result);
但结果是一个空数组。我怎么能这样做?
答案 0 :(得分:7)
如果您使用ReferenceMany或ReferenceOne,则无法通过任何参考文档字段进行查询,但参考文档ID除外。
如果您需要从引用的集合中查询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');
答案 1 :(得分:5)
您必须使用查询构建器的 references() 方法来获取 @MongoDB \ ReferenceOne ,例如https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html
$productType = $dm->getRepository('Cms\Model\ProductTypes')->findOneByCode('car');
$queryBuilder = $dm->getRepository('Cms\Model\Param')->createQueryBuilder()
->field('productTypes')->references($productType);
$results = $queryBuilder->getQuery()->execute();
PS :使用 includesReferenceTo() a @MongoDB \ ReferenceMany
答案 2 :(得分:0)
->field('productTypes.code')->equals(new \MongoRegex('/.*car.*/i'))