Doctrine ODM Query Builder - найдите, где коллекция пуста

Я пытаюсь создать запрос с помощью построителя запросов 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());

Я вижу в документации вы можете использовать field('eventListeners')->size(3);, однако я заранее не знаю, каким должен быть размер коллекции.

Как запрашивать непустые коллекции с помощью Doctrine ODM?


person AlexP    schedule 20.11.2013    source источник


Ответы (1)


Вероятно, это не лучший способ добиться этого, но он работает:

$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();

Это предполагает, что это индекс Collection, основанный на 0, а не Hash.

Я понимаю, что вы можете сделать DB.find({eventListeners: {$not: {$size: 0}}}) в монго, но я не уверен, как правильно структурировать его в построителе запросов ODM.

После просмотра документации по odm Я не уверен, что это вообще возможно.

Другой подход заключается в использовании функции $where: http://docs.mongodb.org/manual/reference/operator/query/where/

person Josh Stuart    schedule 02.12.2013