Yury
Пробовал сделать первую ноду всегда primary вот так, но не получается.
lmn
к примари подключаетесь точно?
Yury
Строка подключения выглядит так MONGO_CONNECTION_URI=mongodb://127.0.0.1:30001/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.2
Yury
к примари подключаетесь точно?
А вот подскажите, как задать/узнать, какая нода является primary? Или, у меня строка подключения неверная, и там нужно все три ноды указывать?
Yury
Через запятую
lmn
команда есть в монгу чтобы узнать примари. я уже не помню ее погуглите
lmn
#mongosh "$dbPath" --eval 'var m = db.isMaster(); print("Is Primary?", m.ismaster); print("hosts:", m.hosts); print("Primary:", m.primary)' --quiet
lmn
что то такое вроде
Yury
#mongosh "$dbPath" --eval 'var m = db.isMaster(); print("Is Primary?", m.ismaster); print("hosts:", m.hosts); print("Primary:", m.primary)' --quiet
Спасибо, но, видимо, я чего-то не понимаю. У меня адрес подключения к БД зашит в .env файле на беке. Получается, что при каждом перезапуске докера, мне нужно узнавать, какая нода primary и менять .env ?
Yury
Есть ли способ автоматизировать этот процесс?
lmn
да я не помню уже давно игрался с репликасетом. автоматизировать скриптом
lmn
мне для монгоипорта надо было так что меня только примари и интересовал
lmn
если просто из прилаги вроде так подключаемся со всеми портами mongodb://localhost:30001,localhost:30002,localhost:30003/?replicaSet=rs0
Yury
MONGO_CONNECTION_URI=mongodb://127.0.0.1:30001,127.0.0.1:30002,127.0.0.1:30003/?replicaSet=rs3&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.2
lmn
это для аппы а не для монгошела
lmn
хотя и для него наверное. не помню уже) давно было. помню возился пока получилось все)
Yury
это для аппы а не для монгошела
Вот я это строку в свой mongoose кормлю)
lmn
ну про жс я вообще не в курсах. из того что у меня осталось под рукой только это сорян)
Yury
По итогу могу подключиться к одной ноде
Yury
mongodb://127.0.0.1:30001/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.2
Yury
А к репликам не могу
Yury
ни через компас
Yury
ни через бекенд
Evgenij
Вот так указать список всех реплик. Соединение будет всегда установлено с primary node mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=myReplicaSet&...Other_Options...
Evgenij
зачем к неактивным подключаться напрямую?)
Yury
пытаюсь через компас
Yury
Возможно, это из-за того, что реплики поднимаю в докере?
Yury
зачем к неактивным подключаться напрямую?)
Потому что активная при перезапуске докера постоянно меняется
Evgenij
ну так варианта два: 1) делайте expose портов монги на всех контейнерах с репликами в разные порты хоста, юзаете строку подключения, как я увидел уже два раза выше указали 2) делаете доп контейнер в бридже контейнеров монги, который прокидывает коннект во все три с выбором ниже и экспозит в один порт на хост
Evgenij
Кстати, я сейчас у ChatGPT спросил что делать в вашей ситуации - и она оба варианта которые я выше написал и предложила (я не очень с монгой, так что решил себя перепроверить)
yopp
Кстати, я сейчас у ChatGPT спросил что делать в вашей ситуации - и она оба варианта которые я выше написал и предложила (я не очень с монгой, так что решил себя перепроверить)
К советам которые даёт ChatGPT нужно очень критически относиться. Эта модель может генерировать откровенный бред :)
Air
"name": "ab cd" "name": "dc mn" "name": "cd ko" db.items.find({name: "ab cd"}) Находит первую запись А как найти все записи, которые содержат "cd" ? (я казуал)
Air
А такой подход ок для поиска по 5млн записям?
Vladyslav
Ты ювелир
i еще вконце добавь, если нужно case insesitieve
Vladyslav
А такой подход ок для поиска по 5млн записям?
regex сам по себе будет хуже по производительности. Старайся юзать его там, где другим способом не получится
Alexandrr
А такой подход ок для поиска по 5млн записям?
тестовый индекс нужен и полнотекстовый поиск
Илья
насколько херовый запрос? задача: у элементов коллекции есть свойство trxs, оно содержит массив объектов, примерно так [{status: 'success', data: 'test1'}] нужно получить те элементы коллекции у которых в массиве только status: canceled
Илья
этот код нейросеть предложила, он работает
Илья
а так в целом получается правильное направление?
yopp
В целом да
Viktar
а так в целом получается правильное направление?
Запрос странный. Сначала вы указываете статус кансел, а потом, что не другие статусы
Viktar
Мне кажется достаточно первого условия
Илья
Не достаточно
Илья
Он тогда возьмёт прост где у одного из элементов кансел
Илья
А другие проигнорит
Илья
А эти $ne их исключают
yopp
А у вас в status массив?
Илья
У меня в trxs массив
Илья
Статус строка
Vladyslav
Он тогда возьмёт прост где у одного из элементов кансел
у вас тогда status фигово, что массив. Логично что статус должен быть 1, стринг, но не массив
Илья
В trxs лежит массив объектов
Илья
У которых одно из свойств статус
Илья
Нужно получить те записи в монге где в trxs у всех объектов статус canceled
Илья
а $all смотрели?
Честно не разобрался
Илья
1 скрин — то, что не должно браться запросом, 2 скрин — то, что должно
Илья
Vladyslav
вам стоить глянуть в сторону группировки
Vladyslav
либо еще пробнуть $nin и кинуть в него все ненужные статусы
Viktar
1 скрин — то, что не должно браться запросом, 2 скрин — то, что должно
Попробуйте что то вроде .find({trxs:{$all:{$elemMatch:{status:"canceled"}}}})
Viktar
Попробуйте что то вроде .find({trxs:{$all:{$elemMatch:{status:"canceled"}}}})
если не получится, попробуйте тоже самое через агрегацию, матч с телефона сейчас, нет возможности самому протестировать
Илья
https://stackoverflow.com/a/23622265 Нашёл такой солюшен, выглядит самым адекватным
Илья
Ваши предложенные не работают
Alexandrr
firewall?
Yury
Ребят, я новый в администрировании БД. Есть у кого docker-compose файл, где поднимается монга с репликами + настроены все базовые вещи вроде создания backup, авторизация и т.д?
Yury
Я в инете искал, нашел, но подумал спросить на предмет каких-то проверенных решений, чтобы на линукс-хостинге запустил этот докер файл, и готово.
Александр
Подскажите, как в монго добавить данные с ключами которых нет в модели?
Александр
что имется ввиду? поконкретней
Мне нужно получить данные с вебхука. Но вебхук может сбрасывать разные наборы данных с полями которые я могу и не предусмотреть. Т.е сегодня может идти условно имя и тлф, завтра имя и емейл послезавтра емейл и Ник телеграма и куки с страницы и ещё какое-то доп.поле. Т.е все комбинации модели данных я просчитать не могу. Как-то у меня получилось такое сделать, но код потерял и не могу понять как повторить это