我正在尝试使用点表示法查询嵌入式文档 - 以下是一些示例:
http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)
由于我挂了DQL / QueryBuilder API,我想通过Doctrine传递原始查询。我似乎无法在Symfony2的构造中弄清楚这一点。我能确定的唯一代码是:
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$dm->getSchemaManager()->ensureIndexes();
$repo = $dm->getRepository('MyBundle:MyDocument');
$qb = $repo->createQueryBuilder();
// insert magic here
$query = $qb->getQuery();
$result = $query->execute();
以下是点符号的工作原理:
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$dm->getSchemaManager()->ensureIndexes();
$repo = $dm->getRepository('MyBundle:MyDocument');
$qb = $repo->createQueryBuilder();
$qb
->field('embedded_document_field.field1')->equals(1)
->field('embedded_document_field.field2')->equals('foo')
;
$query = $qb->getQuery();
$result = $query->execute();
答案 0 :(得分:0)
这个问题很古老,但如果有人遇到它,使用查询生成器执行此操作相当简单:
$qb = $this->createQueryBuilder();
$qb->addOr($qb->expr()->field('embedded.embedded2.username')->equals($username));
$qb->addOr($qb->expr()->field('embedded.embedded3.username')->equals($username));
$qb->addOr($qb->expr()->field('embedded.embedded4.username')->equals($username));
$qb->field('status')->lt(10);
$involved = $qb->getQuery()->execute();
return $involved;
我承认这实际上并没有回答有关传递原始的问题(这是我自己的问题),但它确实解决了你的问题。