Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Mongo запит

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Як правильно зробити запит Mongo db щоб знайти текст що містить одночасно два слова?

news_coll.find({'language':language, $and: [{'text': {'$regex': word1, '$options': 'i'}}  ,{'text': {'$regex': word2, '$options': 'i'}} ]  })
видає
SyntaxError: invalid syntax
Просто без $and видає всі тексти які містять слова word1 або word2.
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Зачем так делать? Было лень схему размечать?

ну дык shemaless отлично заходит исповедующим принцип — ху-к, ху-к, и в продакшн!

бывает конечно что природа данных такова, что затраты на их структурирование превышают выгоды

но хайп вокруг shemaless подпитывается именно — ху-к, ху-к, и в продакшн!

прочитал как shameless

А потом эти же люди говорят что Монга тормозит и глючит.

---

Если это не прототип или лаба в институте, а реальное приложение, то правильный ответ на ваш вопрос — используйте для полнотекстового поиска ElasticSearch или Solr.

Монга тормозит

таки да
у меня MongoDB в составе Alerta.io, в которую просто приходят хертбиты и алерты всего-лишь с сотен хостов, умудряется потреблять больше CPU, чем ClickHouse c Graphit-ом, в которые приходят 100К+ метрик с этих же хостов, а ведь CH это все еще и жмет

це для прототипу, в ідеалі буде ElasticSearch

$and:

news_coll.find({
    $and: [{
            'language': language,
        },
        {
            'text': {
                '$regex': word1,
                '$options': 'i'
            }
        }, {
            'text': {
                '$regex': word2,
                '$options': 'i'
            }
        }
    ]
})

Хоча я майже не знайомий із Монго, але логіка мені підказує, що у полі $regex можна указувати обидва слова '$regex': `(${word1}.*${word2})|(${word2}.*${word1})`

Але чисто так — погратись, цей код мабуть споживатиме забагато ресурсів.

Дякую, але воно мені не треба. Не прижилась у мене монга, не бачу її переваг перед MySQL. Досить рідко буває, коли вона є найкращим вибором. Свого часу тримав у ній коментарі для сайту, ну і сесії за разом, але пізніше не побачив нащо мені ця морока із переключенням між різними базами.

На скільки я знаю, монга хороша як... такий собі смітничок, куди можна накидувати дані із різними типами, і вони легко витягуються, але тільки якщо не потрібно робити вибірки із джоїнами.

Монга хороша, когда нужно горизонтальное масштабирование. Ну и так еще всякое по мелочи.

Дякую, але так і не знайшов там логічне AND

If the search string includes phrases, the search performs an AND with any other terms in the search string; e.g. search for "\"twinkle twinkle\" little star" searches for “twinkle twinkle” and (“little” or “star”). docs.mongodb.com/...​rator/query/text/#phrases

Тобто, напевно, доцільніше звузити межі пошуку повнотекстовим запитом, а потім вже якщо зовсім треба — дофільтрувати regex.

Підписатись на коментарі