Pregunta

Tengo un documento en mi colección "params" de esta manera:

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

del documento de referencia es la siguiente:

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

Estoy usando DoctrineODM a buscar los documentos "param", que hace referencia "ProductType" es "coche". Estoy usando este código:

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

pero el resultado es una matriz vacía. ¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Si el uso de ReferenceMany o ReferenceOne no se puede consulta por cualquier campo documento de referencia, excepto Identificación del documento de referencia.

Si necesita consulta en code de la colección de referencia se debe utilizar en lugar de EmbedMany ReferenceMany.

En este caso, el documento será:

{
  "_id": ObjectId("4d124cef3ffcf6f410000037"),
  "code": "color",
  "productTypes": [
     {
       "_id": ObjectId("4d120a2d2b8d8d3010000000"),
       "code": "car"
     }
  ]
}

Y consulta siguiente funcionará:

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

Además, si su código es único ProductType se puede utilizar en lugar de MongoId, en este caso se puede consultar en $ id:

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

documento de referencia:

{
  "_id": 'car'
}

Consulta:

$query->field('productTypes.$id')->equals('car');

Otros consejos

Debe usar los referencias () Método de generador de consultas para un @MongoDB \ ReferenceOne como 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 : el uso includesReferenceTo () a @MongoDB \ ReferenceMany

->field('productTypes.code')->equals(new \MongoRegex('/.*car.*/i'))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top