Andrew
это оно запустилось или нет?
ты можешь провверить командой статус
Oleksii
Active: active (running)
Oleksii
а
Oleksii
понял теперь
Andrew
нез
Sardor
Ребят, что за ошибка MongoError: Topology was destroyed? Впервые сталикваюсь, хз, что с ней делать
yopp
Ребят, что за ошибка MongoError: Topology was destroyed? Впервые сталикваюсь, хз, что с ней делать
Это ошибка драйвера, судя по коду, возникает когда view на топологию перестал быть актуальным. Самый простой способ переподклбчится
Sardor
Это ошибка драйвера, судя по коду, возникает когда view на топологию перестал быть актуальным. Самый простой способ переподклбчится
Переподключаюсь, ошибка все равно возникает. Она впервые вышла на сервере, сейчас локально на ноуте тоже ловлю. И ноут, и сервер работают с одном инстансом на Атласе. Может быть, что с ним что-то не так?
Sardor
Подключитесь через шелл и посмотрите статус репликасета
Прошу прощения за долгий ответ. Вы бы могли, пожалуйста, подсказать, как это сделать? Не нашел в гугле
yopp
Прошу прощения за долгий ответ. Вы бы могли, пожалуйста, подсказать, как это сделать? Не нашел в гугле
В атласе есть инструкции. Нажмите на connect и в одном из табов будет инструкция как подключиться к кластеру через командную строку
yopp
rs.status()
Sardor
rs.status()
Спасибо! Сделал. А на что конкретно там надо смотреть? Ошибок, вроде, нет, на "ок" стоит однерка https://gist.github.com/Khuzha/9abba04cd9a47deab77091afee6b8b9d
Sardor
кстати, тут еще начало MongoError: pool destroyed выходить:) Оно из той же серии?
yopp
Это в шелле?
Sardor
Это в шелле?
Как я пониммаю, да. Та ссылка с Атласа же шелл запускает? И тут написано, что шелл. Раньше никогда не приходилось работать с ним
Sardor
Это в шелле?
а, если Вы про ошибку MongoError: pool destroyed — нет, она в исполняемом файле, подключающемся к Монге
yopp
Вероятно у вас какие-то сетевые проблемы
yopp
Если из шела нормально получатся подключится и вы видите и статус ноды к которй подключились и можете выполнять команды требующие серверного cluster view, то вероятнее всего проблема где-то в вашем приложении
yopp
Или в сети. Но если pool destroyed и topology destroyed то больше похоже на то что инстанс клиента к монге по какой-то причине теряет соединение
yopp
А команды все ещё пытаются выполняться
Sardor
А команды все ещё пытаются выполняться
Спасибо большое за развернутый ответ!
Sardor
Или в сети. Но если pool destroyed и topology destroyed то больше похоже на то что инстанс клиента к монге по какой-то причине теряет соединение
Я нагуглил, что метод insertOne() может выполняться и после закрытия соединения client.close(), но у меня везде стоят await, т.е. после закрытия соединения никакие методы не вызываются. updateOne() и insertOne() же не запускают ничего другого, что требует соединения, да?
Sardor
А зачем вы закрываете соединение?
У меня много файлов и я решил, что лучше в каждом из них открывать соединение и закрывать после выполнения, чем тащить db с одного из них. Ну и в кое-каких моментах было бы просто кастыльно тащить его А закрываю, потому что один из файлов запускается для каждого юзера и атлас ругается, что нарушаю лимит числа соединений
Sardor
Или тут можно что-нибудь другое придумать?
yopp
Тогда вероятнее всего ваши проблемы связаны с тем, что вы закрываете соединение, а в очереди запросов ещё что-то есть. Закрывать соединение не нужно. Подключайтесь к монге в момент запуска приложения и шарьте клиента на весь ваш код и держите его открытым всегда. Пусть драйвер за вас закроет соединение когда приложение будет завершаться.
Алексей
Ребят привет
Алексей
делаю выборку в питоне подскажите плиз
Алексей
'$or': [ { '$and': [ {'updated_at': {'$gte': new ISODate("2019-05-04")}}, {'updated_at': {'$lt': utcnow() - timedelta(days=1)}}] }, { 'updated_at': None } ] },
Алексей
ргуается на вот строку где ans ...
Алексей
вот скринчик куска где ругается
Алексей
49 строчка
Алексей
очень нужна помощь
Ilya
вот скринчик куска где ругается
если у вас в updated_at хранится дата в формате Date то наверное правильнее будет использовать не new ISODate("2019-05-04") а питоновское datetime(year=2019, month=5, day=4)
Ilya
ну судя по запросу вы все таки там хрантие не строки а именно дату. все зависит от того как записанно поле в монгу
Алексей
Как Date
Ilya
ну значит и работать надо с ней с типом datetime
Ilya
ну или Date из пакета datetime я уж точно не помню
Ilya
с полем updated_at вы же с питоновскими типами работаете а тут почему то по другому решили
Ilya
ой
Ilya
я имел ввиду со второй частью запроса
Алексей
'$and': [{'updated_at': {'$gte': date(2019, 05, 04)}}, {'updated_at': {'$lt': utcnow() - timedelta(days=1)}}] получается так
Ilya
да
Алексей
спасибо, что-то сглупил
Алексей
теперь другая проблема
Алексей
сделал как выше, стал ругаться на invalid token в это же строке
Алексей
скорее всего надо без ‘0’
Nick
'$and': [{'updated_at': {'$gte': date(2019, 05, 04)}}, {'updated_at': {'$lt': utcnow() - timedelta(days=1)}}] получается так
не знаю к чему пишу, но текущая схема из гте и лт не позволит сделать выборку за один день вчера. если вдруг такая необходимость есть то стоит пересмотреть запрос
Алексей
мне надо что бы выбирал с 04 05 месяца по сутки спустя от текущей даты
Nick
я про общее решение. если будете использовать его для произвольных интервалов то будут проблемы
Алексей
Вот сейчас есть проблема в том что очень долго он делает выборку, хоть и есть индексы
Алексей
т.е как я понимаю он идет по всем данным в монге и это очень долго
Алексей
и следовательно бд постоянно растет
Дамир
Всех приветствую! Выполняют следующий запрос: db.getCollection('user').find( { "phones.phone": { $in: ["77771112233", "77772221133", "77774442255"] } } ) Выводит у кого установлен один из номеров. Вопрос, как можно узнать по какому из номеров был найден?
Алексей
в find добавить возвращаемы поля
Дамир
Весь документ возвращает при запросе, или Вы про другое?
yopp
Всех приветствую! Выполняют следующий запрос: db.getCollection('user').find( { "phones.phone": { $in: ["77771112233", "77772221133", "77774442255"] } } ) Выводит у кого установлен один из номеров. Вопрос, как можно узнать по какому из номеров был найден?
Если вы хотите отфильтровать массив оставив только элементы, где значение phone удовлетворяет условию, то проще всего переписать это на агрегацию с $match + $project с $filter (https://docs.mongodb.com/manual/reference/operator/aggregation/filter/)
Vasiliy
Доброго дня! Кто знает как в mongoose получить _id созданного через create() документа? По умолчанию возвращается _id: null. Лучшее что я пока что придумал - заранее создавать через mongoose.Types.ObjectId() новый _id, добавлять его в объект и уже потом вызывать create().
Виктор
В schema _id указывал?
Vasiliy
В schema _id указывал?
Да, указывал
Виктор
Убери, должно помочь
Виктор
Не помогло
Интересно, надо код смотреть. У меня он автоматом генерит _id
Vasiliy
Интересно, надо код смотреть. У меня он автоматом генерит _id
У меня тоже генерит, только в возвращаемом ответе его нет
Vasiliy
await model.create(args) -> {_id: null, ...}
Виктор
Почему save не используешь?
Виктор
new model(args), у полученного объекта await obj.save()
Vasiliy
new model(args), у полученного объекта await obj.save()
Так тоже пробовал, но проблема воспроизводится
Vasiliy
new model(args), у полученного объекта await obj.save()
Я использую typegoose, который является typescript обёрткой над mongoose. Возможно в этом дело, но я сомневаюсь
Oleksii
Здравствуйте впервые пользуюсь монго и не могу разобраться в доке, что и как Может кто-то объяснить в лс как нужно в коде подключить бд и делать запросы?
Alexander
В коде - какой стек?