![](/img/trans.png)
[英]How to delete document from a referenced array of documents in doctrine ODM with mongodb
[英]How to find by referenced document in Doctrine ODM with MongoDB?
我的“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);
但結果是一個空數組。 我怎樣才能做到這一點?
如果您使用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');
您必須使用查詢生成器的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()一個@MongoDB \\ ReferenceMany
->field('productTypes.code')->equals(new \MongoRegex('/.*car.*/i'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.