Php Doctrine ODM查询生成器-查找集合为空的位置
我试图使用doctrine ODM查询生成器创建一个查询,其中引用的关联(Php Doctrine ODM查询生成器-查找集合为空的位置,php,mongodb,doctrine-orm,query-builder,doctrine-odm,Php,Mongodb,Doctrine Orm,Query Builder,Doctrine Odm,我试图使用doctrine ODM查询生成器创建一个查询,其中引用的关联(eventListeners)不是空的,或者集合有一个或多个项 查询: $qb = $om->createQueryBuilder(FormService::ENTITY_CLASS_NAME_FORM); $query = $qb->field('website.$id')->equals(new \MongoId($website->getId())) ->fiel
eventListeners
)不是空的,或者集合有一个或多个项
查询:
$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());
我可以在中看到您可以使用字段('eventListeners')->大小(3)代码>但是我事先不知道集合大小应该是多少
如何使用Doctrine ODM查询非空集合?这可能不是实现这一点的最佳方法,但它确实有效:
$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的索引集合
,而不是散列
我意识到您可以在mongo中执行DB.find({eventListeners:{$not:{$size:0}}}})
,但我不确定如何在ODM查询生成器中正确构造它
在回顾了这篇文章之后,我甚至不确定是否有可能做到这一点
另一种方法是使用$where
函数:这可能不是实现这一点的最佳方法,但它确实有效:
$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的索引集合
,而不是散列
我意识到您可以在mongo中执行DB.find({eventListeners:{$not:{$size:0}}}})
,但我不确定如何在ODM查询生成器中正确构造它
在回顾了这篇文章之后,我甚至不确定是否有可能做到这一点
另一种方法是使用$where
函数:这可能不是实现这一点的最佳方法,但它确实有效:
$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的索引集合
,而不是散列
我意识到您可以在mongo中执行DB.find({eventListeners:{$not:{$size:0}}}})
,但我不确定如何在ODM查询生成器中正确构造它
在回顾了这篇文章之后,我甚至不确定是否有可能做到这一点
另一种方法是使用$where
函数:这可能不是实现这一点的最佳方法,但它确实有效:
$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的索引集合
,而不是散列
我意识到您可以在mongo中执行DB.find({eventListeners:{$not:{$size:0}}}})
,但我不确定如何在ODM查询生成器中正确构造它
在回顾了这篇文章之后,我甚至不确定是否有可能做到这一点
另一种方法是使用$where
函数: