Doctrine ODM查询生成器 - 查找集合为空的位置

时间:2013-11-20 16:03:09

标签: php mongodb doctrine-orm query-builder doctrine-odm

我正在尝试使用doctrine ODM查询构建器创建一个查询,其中引用的关联(eventListeners不为空 - 或者该集合包含一个或多个项目。< / p>

查询:

$qb = $om->createQueryBuilder(FormService::ENTITY_CLASS_NAME_FORM);
$query = $qb->field('website.$id')->equals(new \MongoId($website->getId()))
            ->field('status.name')->equals(FormService::STATUS_PUBLISHED)
            ->field('eventListeners')->notEqual(array());
            ->getQuery();
$results = $query->execute();

我在尝试使用API​​方面一直很有创意;此行显然不正确,因为它仍然返回所有文档,无论

->field('eventListeners')->notEqual(array());

我可以在the documentation中看到您可以使用field('eventListeners')->size(3);但我事先并不知道收集的大小应该是什么。

如何使用Doctrine ODM查询非空集合?

1 个答案:

答案 0 :(得分:2)

这可能不是实现这一目标的最佳方式,但确实有效:

$qb = $om->createQueryBuilder(FormService::ENTITY_CLASS_NAME_FORM);
$query = $qb->field('website.$id')->equals(new \MongoId($website->getId()))
            ->field('status.name')->equals(FormService::STATUS_PUBLISHED)
            ->field('eventListeners.0')->exists(true)
            ->getQuery();

$results = $query->execute();

这假定它是基于0的索引Collection而不是Hash

我意识到你可以在mongo中做DB.find({eventListeners: {$not: {$size: 0}}}),但我不确定如何在ODM查询构建器中正确构建它。

在审核odm documentation后,我不确定是否可以这样做。

另一种方法是使用$where函数:http://docs.mongodb.org/manual/reference/operator/query/where/