2010-12-22 113 views
14

我在我的「PARAMS」收集一個文檔這樣的:如何在Doctrine ODM中使用MongoDB查找引用文件?

{ 
    "_id": ObjectId("4d124cef3ffcf6f410000037"), 
    "code": "color", 
    "productTypes": [ 
    { 
     "$ref": "productTypes", 
     "$id": ObjectId("4d120a2d2b8d8d3010000000"), 
     "$db": "test" 
    } 
    ] 
} 

引用文檔是這樣的:

{ 
    "_id": ObjectId("4d120a2d2b8d8d3010000000"), 
    "code": "car" 
} 

我使用DoctrineODM獲取其引用的「參數」文件「 productType「是」汽車「。我正在使用此代碼:

$query = $dm->createQuery('Cms\Model\Param'); 
$query->field('productTypes.code')->equals('car'); 
$result = $query->execute(); 
var_dump($result); 

但結果是一個空數組。我怎樣才能做到這一點?

+0

你要如何連接到數據庫?這不是'測試'或'管理員'嗎? – 2010-12-22 21:50:20

+0

沒有。它不是測試或管理。我改了名字。 – cnkt 2010-12-22 21:51:20

回答

6

如果使用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'); 
0
->field('productTypes.code')->equals(new \MongoRegex('/.*car.*/i')) 
4

必須使用引用()的@MongoDB \ ReferenceOnehttps://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

相關問題