MongoDB и Доктрина. Как искать текст в массиве?

0

Некоторый документ mongo Пользователь содержит массив встроенного документа Message, в котором есть элемент "текст":

/**
 * @MongoDB\EmbeddedDocument
 */
class Message {
     /**
     * @MongoDB\Field(type="string")
     */
    protected $text;
}

/**
 * @MongoDB\Document(collection="chats")
 * @JMS\ExclusionPolicy("none")
 */
class User {
     /**
     * @MongoDB\EmbedMany(targetDocument=myBundle\Document\Message", strategy="addToSet")
     */
    protected $messages = array();

}

Как заразить messages.text всех пользователей в datbaase для некоторой подстроки? Поэтому, если у кого-то пользователя есть сообщение "Hello Bob!", Этот будет найден путем поиска "Боба".

  • 0
    Просто скажу вам, что у вас будет большая проблема с производительностью, если вы забудете использовать полнотекстовый индекс!
Теги:
doctrine2

1 ответ

1
Лучший ответ

Вы попробовали что-то вроде:

$product = $this->get('doctrine_mongodb')
    ->getManager()
    ->createQueryBuilder('YourOwnBundle:User')
    ->field('messages.text')->equals(new \MongoRegex('Bob'))
;

Не забудьте использовать полнотекстовый индекс, если вы хотите выполнить какие-либо действия в этом виде запроса!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню