Автозаполнение тегов в MongoDB - PullRequest
0 голосов
/ 29 января 2019

У меня есть коллекция документов с массивами tags, содержащими строки 0+.

Я хочу предложить поле поиска по тегам, которое автоматически заполняет допустимые теги.Это можно сделать, имея коллекцию всех этих тегов, которая по сути является индексом поля тегов, и выполняйте, т. Е. {tags:{$regex:/^ro/}}, поскольку каждый символ вводится в поле.По мере ввода отображаются действительные теги, такие как «Рим», «Роль» и т. Д.

Как только некоторые теги указаны в пользовательском интерфейсе, пользователь выполняет фактический поиск, который включает в себя, среди прочего, теги, выполняярегулярное find выражение. Я не хочу текстового поиска для поля тегов, поэтому, пожалуйста, не предлагайте это.

Другими словами, для автозаполнения тега мне не нужно ссылки на помеченные документы, мне нужен только список тегов, которые соответствуют регулярному выражению.

Нужно ли мне поддерживать свою собственную коллекцию тегов, или я могу каким-то образом использовать индекс tags для этого

1 Ответ

0 голосов
/ 31 января 2019

Я нашел одно решение для этого:

db.test.aggregate([
  { "$unwind": {path:"$tags"}},
  { "$match": {tags:{$regex:/^ro/}} },
  { "$group": {"_id":null, "tags":{"$addToSet":"$tags"}}}
])

Это дает мне нужные мне результаты, хотя я не уверен, есть ли лучшая форма запроса.Производительность кажется не хуже, чем у похожих запросов, которые не сжимают результаты так, как я хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...