Alexandrr
То есть это нормальная практика?
>>>слишком мало конкретики. (https://t.me/mongodb_ru/123204)
Роман
Трудно
Роман
const words = message.content.split(' ') //Условный массив слов const sorted = [] // Массив слов, найденных в базе words.foreach(w => { Sorted.findOne({text: w}, function(err, result) { if (result) { sorted.push(w) } else { //добавление неизвестного слова в базу } } }
Роман
Вот я не могу дождаться наполнения массива sorted
Роман
не понимаю как его обернуть
Alexander
const words = message.content.split(' ') //Условный массив слов const sorted = [] // Массив слов, найденных в базе words.foreach(w => { Sorted.findOne({text: w}, function(err, result) { if (result) { sorted.push(w) } else { //добавление неизвестного слова в базу } } }
Я бы делал при помощи промисов - записать их в массив, потом allSettled. Ну, и можно попробовать вначале найти отсутствующие слова, а потом вставить используя insertMany.
Роман
Ну, у меня там схема, насчёт insertMany не знаю
Роман
Конструктором создаю и .save()
Роман
Javascript
Роман
Но все таки идею с промисами нужно развивать, спасибо
Роман
Думал может изобретаю велосипед и есть способ сделать это гораздо проще и разумнее
Alexander
Без промисов можно так, вначале поиск по всем словам. Из колбэка делаете push в массив results - true/false. Когда массив сравнивается с исходным по длине, то переходите к записи.
Роман
Ну может это лишний костыльный массив, суть в том, что я его потом перебираю и изменяю записи существующих слов, только это обязательно вызывается только после того, как неизвестные слова были сохранены
Alexander
Ну может это лишний костыльный массив, суть в том, что я его потом перебираю и изменяю записи существующих слов, только это обязательно вызывается только после того, как неизвестные слова были сохранены
Временный массив, да. Костыльный - нет. Можно объединить поиск и запись - если слово нашлось то пушите в results, если нет, то вызываете insert и из его колбэка пушите. Тоже с проверкой. Ю
Роман
Мне нужно вызвать апдейт только когда все слова неизвестные были записаны
Alexander
Мне больше нравится с промисами, но такой вариант тоже вполне нормальный.
Роман
На основе сохраненных слов я делаю апдейт
Роман
Там связи
Роман
Так что нужно чтобы обязательно сохранились неизвестные и я получил их ObjectId
Alexander
Вопрос-то в чем?))
Роман
Вот я не могу дождаться наполнения массива sorted
Роман
не понимаю как его обернуть
Роман
Ну предложили вариант с allSettled, нужно попробовать
Роман
Я с Promise.all пробовал
Alexander
Различие между all и allSettled в данном случае не большое. all остановится при первой ошибки, allSettled выполнит все.
Роман
All не помог, вроде чтобы then сработал, нужно вызвать resolve, не так ли? А когда его вызывать я не знаю
Роман
Alexander
То есть добавить в map аргумент index, проверять последнюю итерацию и тогда можно запускать следующие операции?
нет, в callback’е проверять длину массива, когда достигла длины оригинального это значит прошли все и можно пеерходить к следующей стадии
Роман
Я сделал что-то типа foreach(item => { Sorted.findOne({text: item}) .then((data) => { //saving }) } Но так код будет ждать завершения каждой итерации для начала следующей, так?
Роман
Ещё пытался запехнуть массив Query в Promise.allSettled, вызвать then, но безуспешно
Роман
странно, должно ведь работать
Alexander
const promisses = map((item) => Sorted.findOne(…).then((…) => тут тоже должегн промис возвращаться)
Роман
так и сделал
Роман
через map вернул массив query
Роман
const promisses = map((item) => Sorted.findOne(…).then((…) => тут тоже должегн промис возвращаться)
да, так работает, но итерации будут одновременно происходить, или по очереди, ждать друг друга? с запросами в бд это может на секунды затянуться
Alexander
я подобный код написал здесь
вам же нужно промис получить, чтобы понять когда все запрсоы закончены, для этого нужно вренуть проимис
Роман
а.. ретурн забыл что ли
Alexander
Роман
Спасибо
Роман
А то я что-то всё забыл совсем
El
подскажите пожалуйста, пытаюсь использовать в запросе обновления $addToSet и $pull, но вроде как конфликт происходит. Мне каким образом объединить запросы можно, с помощью агрегации или транзакции? Либо что то еще можно сделать. Спасибо.
El
пытаюсь понять как быть если пришел запрос на удаления элемента в массиве и на добавления новых, как эти запросы подружить в один
Aleksey
День добрый, у кого нибудь быть опыт деплоя Mongo в K8s с помощью helm & bitnami-char?
El
у меня возможно проблемы с пониманием фронта, то ли на удаление делать один объект, а на добавления другой, либо кидать все в один на добавления и удаления. Тогда надо как то помечать ключи: categories на добавления, а pullCategories на удаление. Как вообще интересно в практике лучше это делать?
El
как у вас возникла ситуация, что вы одновременно и удаляете и добавляете?
Ну допустим в карточке товара можно же предположить что некоторые фотографии удалить надо, а новые залить и потом нажать на сабмит
Nick
Ну допустим в карточке товара можно же предположить что некоторые фотографии удалить надо, а новые залить и потом нажать на сабмит
это разные действия, которые предполагают работу с объектом и меняется весь объект, а не разбивается на отдельные запросы, если это через сабмит хочется делать
Nick
т.е. в вашем случае вы должны сформирвоать новый массив на сонове старого и целиком отправить в базу его
Nick
либо вы на каждое активное действие отправляете апдейт на изменение/добавление/удаление одного элемента массива в БД
El
Да и такие варианты были в голове. Но спасибо что подтолкнули меня на решение. Я почему то думал, что менять целиком массив более затратно
El
А на каждое действие не решился, предполагая что слишком часто запросы
El
Но это все от не владения навыков. Пребегну к одной из ваших решений. Спасибо
Nick
для монги каждый запрос это всеравно изменение документа так или иначе и менять элемент в массиве и менят ьвесь массив плюс минус одинаково выйдет
"
Does someone work with “google signip” nodejs and mongogdb
"
I have a question
Егор
Ребят, подскажите, сейчас если создавать новую бд на MongoDB, она корректно отрабатывать будет? p.s. Уже второй час не могу подключиться по mongodb+srv://...
Nichita
Привет всем, есть гуру по индексам в монге?
Nick
Александр
Nichita
У меня большая коллекция на 10млн, по ней нужно делать много фильтраций по разным полям и сортировки, при этом поля вложенные до 3-4 уровня и array поля. На данный момент создано уже 36 индексов, но при этом некоторые запросы плохо отрабатывают, запросы попадают не всегда в нужный индекс. Нужно доработать и оптимизировать P.s. даже наличие реплик не всегда спасает
Nichita
адъ
Согласен
Alexandrr
)) Это проблема, которую надо решить
начните с детального описания проблемы
Nichita
Хвастаюсь налчием 36 индексов, которые не всегда срабатывают?))
Viktar
Хвастаюсь налчием 36 индексов, которые не всегда срабатывают?))
Я так понимаю, у вас проблема со схемой. Попробуйте изменить.
Nichita
Я так понимаю, у вас проблема со схемой. Попробуйте изменить.
Это до меня уже создали, сейчас это никому не интересно менять. Мне нужно оптимизировать индексы, конечно если это возможно. Какие вообще варианты для данной проблемы?
Viktar
Мы бы вам с удовольствием помогли, но дайте нам шанс. Опишите какой запрос у вас не попадает в индекс.
Alexandrr
Хвастаюсь налчием 36 индексов, которые не всегда срабатывают?))
индекс и поиск по нему - это не теория вероятности, которая "срабатывает не всегда". это написанный код СУБД, который либо вызывает исключения, либо исполняется. применяется индекс при поиске или нет, это зависит от написанного кода приложения, то есть от вас.