совпадение для фильтрации результатов в поиске MongoDB в Symfony 4 с ODM Entity - PullRequest
0 голосов
/ 21 октября 2019

Сущность: KeyWord

/**
 * @MongoDB\Document(repositoryClass=KeyWordRepository::class)
 */
class KeyWord
{
    /**
     * @MongoDB\Id()
     */
    private $id;

    /**
     * @MongoDB\Field(type="string")
     * @Assert\NotBlank()
     */
    private $search;

    /**
     * @MongoDB\ReferenceMany(targetDocument="KeywordGroup::class", mappedBy="keyword")
     * @var Collection
     */
    private $keywordGroups;

}

Сущность: KeyWordGroup

/**
 * @MongoDB\Document(repositoryClass=KeywordGroupRepository::class)
 */
class KeywordGroup
{
   /**
     * @MongoDB\Id()
     */
    private $id;

    /**
     * @MongoDB\ReferenceMany(targetDocument="Keyword::class", inversedBy="keywordGroups")
     * @var Collection
     */
    private $keyword;
}

Функция репозитория для получения результата из группы ключевых слов

public function getKeyWordGroup()
    {

        $builder = $this->dm->createAggregationBuilder(KeywordGroup::class);

        $builder
            ->hydrate(Keyword::class)
            ->match()
                ->field('keywordResult.search')->equals('Hotel')
            ->lookup('Keyword')
                ->localField('keyword.id')
                ->foreignField('id')
                ->alias('keywordResult')
            ;

        return $builder->execute();
    }

С контроллера, который я вызываюфункция репозитория, такая как:

$results = $this->dm->getRepository(KeywordGroup::class)->getKeyWordGroup();
foreach ($results as $result) 
{
   dump($result);
}

Мне нужны все записи из группы ключевых слов, которые имеют ключевое слово "Hotel"Этот запрос дает мне 0 записей, даже если у меня есть ключевое слово "Hotel".

...