Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Doctrine ODM查询生成器-查找集合为空的位置_Php_Mongodb_Doctrine Orm_Query Builder_Doctrine Odm - Fatal编程技术网

Php 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

我试图使用doctrine ODM查询生成器创建一个查询,其中引用的关联(
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
函数: