我正在尝试使用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查询非空集合?
答案 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/