Anton
есть индекс по query надо индекс для $nor: query
Dmytro
если я использую приложение в одно лицо
Dmytro
то уместен только mongoose.connect
Dmytro
но дока пишет, что если несколько кластеров (а у меня не так всё круто), то надо юзать createConnection
Dmytro
но прикол в том, что задача простая - уметь открыть два соединения. как и в других РБД
Dmytro
как какой тут подход? один раз открываю коннекшн и он keep alive?
Dmytro
или если есть запрос - открыл соединение, потом выборка какая-нибудь (например), а потом закрыть.
Dmytro
Что правильно?
Dmytro
@AntonKrevedko
Anton
Что правильно?
Одно соединение открываешь и все
Dmytro
а если 2+ юзеров
Dmytro
конфигурировать await Mongoose.connect(uri, { useNewUrlParser: true, poolSize: 3, });
Dmytro
уместно ли вообще убивать тогда соединение7
Dmytro
Получается этакая регистрация коннекшена, и таких максимум poolSize
Dmytro
```MongooseError: Operation users.insertOne() buffering timed out after 10000ms at Timeout.<anonymous> (/Users/dkryshtopenko/WebstormProjects/kryshdotos/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:184:20) at listOnTimeout (internal/timers.js:554:17) at processTimers (internal/timers.js:497:7) не прошу много, не знаю как в таком случае победить второе открытие сессии
Dmytro
export const connect = async (): Promise<Mongoose.Connection> => { if (!database) { await Mongoose.connect(uri, { useNewUrlParser: true, poolSize: 3, }); database = Mongoose.connection .once('open', async () => { console.log('Connected to database'); }) .on('error', () => { console.log('Error connecting to database'); }); } return database; }; export const disconnect = async (): Promise<void> => { if (database) { await Mongoose.disconnect(); } };
Dmytro
открыл пул, что-тозаписал, закрыл
Dmytro
вызываю метод снова, ошибка выше.
Dmytro
@AntonKrevedko
Dmytro
странно, ибо пример брал с офф доки
yopp
открыл пул, что-тозаписал, закрыл
вам не нужно его закрывать
yopp
открытие соединения дорогая операция, особенно если там tls
Dmytro
вам не нужно его закрывать
а какой жизненный цикл сессии тогда вообще
yopp
накладные расходы на открытое соединение со стороны монги незначитаельные
yopp
сессия != соединение
Dmytro
закрывать соединение нельзя, больше одного соед нельзя создавать
yopp
когда вы делаете mongoose.connect вы открываете пул соединений
yopp
он автоматически наполняется по мере требования до maxPoolSize
yopp
после достижения лимита и отсустствии свободных соединений в пуле, в зависимости от опции, вы или исключение получите или запрос встанет в очередь
yopp
я не помню точно, помоему-то там нет таймаута, а есть ограничение на глубину очереди
yopp
посмотрите в документации
yopp
https://mongoosejs.com/docs/faq.html#callback_never_executes
Anton
https://mongoosejs.com/docs/faq.html#callback_never_executes
Не знаешь существуют ли сервисы автогенерации индекса под медленные запросы?
yopp
В атласе помоему есть такая опция
Dmytro
ну и еще вопрос интели сенса
Dmytro
UserSchema.statics.findOneOrCreate = findOneOrCreate; UserSchema.statics.findByAge = findByAge; UserSchema.methods.setLastUpdated = setLastUpdated; UserSchema.methods.sameLastName = sameLastName;
Dmytro
я примапил статические и методы экзамляра
Dmytro
Dmytro
всё работает. Выборка происходит.
Dmytro
Но в словаре их нет. Можно как-то избавиться от невалидного undefined
Egor
Всем привет! Такой вопрос: Есть коллекция моделей вида { name: String; cats: [{ id: string; name: string; }] } которая хостится в на cloud.mongodb есть запросы в базу в виде транзакции которые одновременно делают $push и $pull по несколько новых сущностей в массив cats как научить монгу с помощью дашборда в клауде или чего угодно присылать евент апдейта модели в котором можно будет понять какие объекты были удалены а какие добавились в массив cats ?
Egor
(Если что - дефолтный листнер для update + вэбхук в дашборде не решают проблему )
Dima
всем привет посоветуйте плез решения для переезда с одного кластера на другой без остановки пробовал официальный mongomirror, работает прямо скажем так себе, копирует супер долго и крашится при любой удобной возможности + не дает накатывать отдельные коллекции, сразу весь кластер фигачит спасибо
yopp
если на atlas переезжать, там есть инструмент миграции
Dima
это он и есть там под капотом mongomirror
Dima
но репликации master master нет же =(
yopp
но репликации master master нет же =(
на двух кластерх есть данные уже?
Dima
нет, который для переезда - чистый
yopp
на чистом сбросить настройки репликации, ввести все новые ноды в существующий кластер, дождаться завершения репликации, установить новым нодам более высокий приоритет, сделать stepdown
yopp
вывести старые ноды из кластера
yopp
если вы пытаетесь переехать на атлас и увас проблемы с импортом, то пишите в поддержку
Dima
спасибо за вариант
Dima
да техподдержка это то с чего начал)) но они довольно бесполезные ребята
yopp
т.е вы пытаетесь импортировать данные в атлас?
Dima
да
yopp
вы не сможете в кластер в атласе добавить свои ноды
yopp
а какой у вас объём данных и как далеко расположен от вашего кластера в атласе?
Dima
не чтобы прям сильно большой, на проде до 200 гигов в том же регионе
yopp
напишите на mrc@mongodb.com с подробностями, скажите что у вас проблемы с миграцией, какие у вас симптомы
yopp
ещё можете попросить поддержку об эскалации
Dima
окей, спасибо =)
yopp
для M10 и выше помоему доступна ещё и платная поддержка
yopp
не очень дорого было, помоему
yopp
что-то до 100 долларов в месяц
maxsimych
Привет, создавал документы в базе только через updateOne({ date: '2020-12-25')}, { $setOnInsert: { ...} }, { upsert: true }) Таким образом, подразумевалось, что будут создаваться документы без дубликатов по дате. В реальности, оказалось, что периодически создается по 2 документа. Подскажите, почему такое может происходить, и возможно ли избежать это без уникальных индексов?
Dmitriy
filter: {createdAt: {$gte: "2020-12-14T22:00:00.000Z", $lte: "2020-12-24T22:00:00.000Z"}} Подскажите, что тут с фильтром не так?
Dmitriy
Вот в базе это поле: createdAt: 2020-12-16T11:38:21.975+00:00
✙ Nikita
filter: {createdAt: {$gte: "2020-12-14T22:00:00.000Z", $lte: "2020-12-24T22:00:00.000Z"}} Подскажите, что тут с фильтром не так?
я думаю нужно обернуть в фильтре это все в new ISODate(...) но это не точно
✙ Nikita
а это в монгошелле выполняется?
✙ Nikita
или где то в коде ?
Dmitriy
Это я с фронта отправляю запрос
Dmitriy
то есть я отправляю в таком формате, а на Бэке мне преобразовывать в ISODate и тогда должно найти?
Anton
А как можно сделать полную инверсию запроса. Условно есть query надо найти not query
Anton
Учитывая что запрос сложный и просто так его не расписать будет через инверсию
✙ Nikita
Если у меня в одной коллекции ссылки на другие коллекции, как это правильно передавать фронту для отрисовки? Например какая-то транзакция, и у нее есть customer_id, как првильно передавать это в ответе от сервера чтобы фронт вывел табличку Customer Name / Transaction amount ? Вариант с populate() имхо не подходит в плане размера ответа, транзакций может быть сотни, а фронту нужно только имя клиента, и тогда в каждой транзакции будет еще вставлен целый документ клиента Заранее спасибо.
✙ Nikita
P.S. нашел что в populate() можно выбирать поля, это ок тогда, но а вообще какие решения есть?