Kirilll
Хз, но однозначно это должно быть описано в доке драйвера
да закрыли все опять со своей биполярочкой) не доберешься до доков монги теперь без впн и то не всегда)
Nick
да закрыли все опять со своей биполярочкой) не доберешься до доков монги теперь без впн и то не всегда)
дока драйвера вполне себе открыта https://pymongo.readthedocs.io/en/stable/examples/high_availability.html#mongos-load-balancing
yopp
Всем привет Кто может подсказать Если в прикладе (PyMongo) указать несколько монгосов, как точки входа - какой будет выбран для каждого запроса? По нагрузке или по очереди? Версия монги 4.4.9
Балансировки по нагрузке в монге нет Выбор будет по наименьшей задержке Load Balancing If there is more than one mongos instance in the connection seed list, the driver determines which mongos is the "closest" (i.e. the member with the lowest average network round-trip-time) and calculates the latency window by adding the average round-trip-time of this "closest" mongos instance and the localThresholdMS. The driver will load balance randomly across the mongosinstances that fall within the latency window. https://www.mongodb.com/docs/manual/core/read-preference-mechanics/#load-balancing
Nick
https://pypi.org/project/pymongo/ я сюда ходил(
и там в разделе документации ссылка как раз на ридзедокс)
Kirilll
Нашел ответ на свой вопрос Спасибо @yatoba @dd_bb !
madspectator
да закрыли все опять со своей биполярочкой) не доберешься до доков монги теперь без впн и то не всегда)
Для меня оказалось более удобным другое решение. Поднимаем на любой европейской VPS обычный socks-сервер. Далее в браузер ставим расширение Proxy Switchy Omega и настраиваем его так, чтобы трафик шёл через проксю только для указанных сайтов. И прописываем туда сайт mongodb.org, medium.com и другие русофобские ресурсы.
Tetra
хорошим открытием было, что Ябраузер сам некоторые сайты редиректит и пытается открыть прям топ
жаль что они в яндексе не состоянии починить работу своих серваков с FF и кривыми редикректами
Котяй
Могу ли я на уровне СУБД ввести ограничения типа: "в экземпляре обязательно присутствует одно из полей, и только одно из них"?
Anton K.
судя по доке там validator опирается на jsonSchema а в jsonSchema на сколько я помню это можно реализовать
Anatoly
You
Hunter
Всем привет, нужна помощь по структуре бд. Есть users и workouts коллекции. User может сохранять себе много workouts. Сейчас только две идеи, это на стороне user делать поле savedWorkouts и туда сохранять id workouts. Вторая это делать как в SQL промежуточную коллекцию с user_id + workout_id. В первой есть проблема, что после удаления workout у всех users нужно проверять и чистить массив savedWorkouts. Второй подход не знаю насколько подходит под такой тип бд. Если у кого-то есть уже похожие кейсы и решение буду очень благодарен
Hunter
А зачем удалят воркаут если ему можно проставить флаг deleted=true
По той логике что есть, он не нужен, только место будет занимать
Kirilll
По той логике что есть, он не нужен, только место будет занимать
Кст если будет очень частая запись и удаление в коллекции про больших ее объемах Можете столкнуться с тем, что при запросах на чтение по конкретной записи может возвращать Не найдено По крайней мере столкнулись с этим при использовании паймонго При этом запрос через шел монги отдавал верный ответ
Hunter
А нельзя сохранять id юзера в поле в workouts? Будет и удобно вытаскивать документы через lookup
Проблема в том что много юзеров могут сохранить один и тот же воркаут. Даже если я буду сохранять в масив, то после этого что будет с перфоменсом если воркаут сохранит 10к юзеров
Kirilll
Проблема в том что много юзеров могут сохранить один и тот же воркаут. Даже если я буду сохранять в масив, то после этого что будет с перфоменсом если воркаут сохранит 10к юзеров
В такой парадигме согласен Подозреваю у юзеров с воокаутами та же история Тогда логичным выглядит отдельная коллекция
Sanity = nil
Здравствуйте, коллеги. есть поле insertDate, монгокомпасс говорит что тип Date, но когда делаю квери { "insertDate": { "$gte": { "$date": "2010-12-03T13:57:19.000+00:00" }, "$lte": { "$date": "2019-12-03T13:57:19.000+00:00" } } } оно мне находит 0 рекордов, при том что сохранено это поле в таком формате: "insertDate": { "$date": "2019-12-03T13:57:19.000+00:00" }, почему-то вот так оно всё находит: { "insertDate": { "$gte": ISODate("2010-12-03T13:57:19.000+00:00"), "$lte": ISODate("2019-12-03T13:57:19.000+00:00") } } может кто-то помочь понять почему так происходит? возможно в первую квери передаю неправильный формат какой-то?
Nick
Здравствуйте, коллеги. есть поле insertDate, монгокомпасс говорит что тип Date, но когда делаю квери { "insertDate": { "$gte": { "$date": "2010-12-03T13:57:19.000+00:00" }, "$lte": { "$date": "2019-12-03T13:57:19.000+00:00" } } } оно мне находит 0 рекордов, при том что сохранено это поле в таком формате: "insertDate": { "$date": "2019-12-03T13:57:19.000+00:00" }, почему-то вот так оно всё находит: { "insertDate": { "$gte": ISODate("2010-12-03T13:57:19.000+00:00"), "$lte": ISODate("2019-12-03T13:57:19.000+00:00") } } может кто-то помочь понять почему так происходит? возможно в первую квери передаю неправильный формат какой-то?
потому что $date это внутреннее представление и работать надо с ISODate
Sanity = nil
потому что $date это внутреннее представление и работать надо с ISODate
Странно что спринг дата генерит запросы именно вышеописанные, с $date... И очень странно что приложение работает не первый год и видимо только щас определилась эта проблема...
Sanity = nil
если драйвер это нормально хавает, то и норм. Но это не везде так
да вроде хавает, ошибку не дает, но квери ничего не находят.
Nick
да вроде хавает, ошибку не дает, но квери ничего не находят.
он может под {$date:""} воспринять как просто объект, если явной обрабокти нет
Asset
Приветствую всех, подскажите создаю юзера const newUser = await User.create(user); const user = { name: name, email: email, mobile: mobile, street: street, city: city, postalCode: postalCode, }; выходит ошибка Error creating user: MongoServerError: E11000 duplicate key error collection: test.users index: phoneNumber_1 dup key: { phoneNumber: null } at InsertOneOperation.execute (/home/asset/projects/almale/almale-server/node_modules/mongodb/lib/operations/insert.js:51:19) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async tryOperation (/home/asset/projects/almale/almale-server/node_modules/mongodb/lib/operations/execute_operation.js:192:20) at async executeOperation (/home/asset/projects/almale/almale-server/node_modules/mongodb/lib/operations/execute_operation.js:69:16) at async Collection.insertOne (/home/asset/projects/almale/almale-server/node_modules/mongodb/lib/collection.js:154:16) { errorResponse: { index: 0, code: 11000, errmsg: 'E11000 duplicate key error collection: test.users index: phoneNumber_1 dup key: { phoneNumber: null }', keyPattern: { phoneNumber: 1 }, keyValue: { phoneNumber: null } }, index: 0, code: 11000, keyPattern: { phoneNumber: 1 }, keyValue: { phoneNumber: null }, [Symbol(errorLabels)]: Set(0) {} } в модели этого нет const { Schema, model } = require("mongoose"); const schema = new Schema( { name: { type: String, required: true, minLength: 3, maxLength: 100, }, mobile: { type: String, required: true, maxLength: 30 }, street: { type: String, maxLength: 100 }, city: { type: String, maxLength: 200 }, postalCode: { type: String, maxLength: 20 }, email: { type: String, maxLength: 200, required: true }, }, { timestamps: true, } ); module.exports = model("User", schema); что может быть?
Asset
вопрос закрыт
Evgeniy
может кто подскажет... не могу подключиться через mongodb compass к своей бд по tls. Пишет Hostname/IP does not match certificate's altnames: IP: 185.104.248.223 is not in the cert's list хотя [ alt_names ] IP.1 = 185.104.248.223 IP.2 = 178.126.91.26 указан и в логах {"t":{"$date":"2024-10-25T09:34:57.750+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn193","msg":"Connection ended","attr":{"remote":"178.126.91.26:57846","uuid":{"uuid":{"$uuid":"a36d714f-18ee-41a5-a7fe-e49541b7eeaa"}},"connectionId":193,"connectionCount":5}} {"t":{"$date":"2024-10-25T09:35:07.652+00:00"},"s":"I", "c":"WTCHKPT", "id":22430, "ctx":"Checkpointer","msg":"WiredTiger message","attr":{"message":{"ts_sec":1729848907,"ts_usec":652721,"thread":"1:0x7f50ac5c26c0","session_name":"WT_SESSION.checkpoint","category":"WT_VERB_CHECKPOINT_PROGRESS","category_id":7,"verbose_level":"DEBUG_1","verbose_level_id":1,"msg":"saving checkpoint snapshot min: 107, snapshot max: 107 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0) base write gen: 10508"}}}
Mars
Может кто-то реально помочь адаптировать приложение на iOS которое использует бэк в облаке на Атласе для работы в России ? в личке
Kirilll
Всем привет Интересный вопрос Можно ли через монгос узнать, на каком шарде хранится конкретный документ?
Arams
Возможно оно
Val
Люди, помогите, как мне включить аутентификацию на монго кластере? Запускаю через docker compose yml Куда прописать command [“mongod”,”—auth”] ? Если у меня шесть инстансов шардов, три конфиг сервера и один монгос
TheDiVa
Есть ли для монги аналог HikaryCP для sql?
Tetra
Есть ли для монги аналог HikaryCP для sql?
а что надо? любой драйвер монги все что надо умеет сам
Y
Добрый день, подскажите, пожалуйста. Где-то читал, что если указывать $projection, то это может ускорить выполнение pipeline. Правильно ли это или есть какие-то нюансы?
Val
Можно ли «на ходу» в пайплайне агрегации накидывать к значению поля с типом ISODAtE еще три часа?
Val
Как и зачем?
TheDiVa
а что надо? любой драйвер монги все что надо умеет сам
надо чтобы был connection pool, чтобы при каждом запросе в бд не создавать новое соеденение
Амир
Как и зачем?
Ну можете изменить текущее через set и обращение через $
Амир
читайте про пайплайн и что там сделать можно
Artem
Всем привет! Есть Монга 6.0.13 Есть запрос, который запрашивает имя клиента и его метку в виде regexp, используется индекс по двум полям, но не тот который нужно и работает 7-8с. Через hint берём и используем нужный индекс и получаем 1-2с на запрос. Читал, что планировщик Монги запросы с regexp прекрасно отрабатывает по индексу, Если в первом поле идёт обычное условие, а уже затем regexp. Оба индекса перестраивал, без изменений. Статистику самого кластера пока не сбрасывал, т.к повлияет на работоспособность остальных клиентов. Какие ещё действия можно предпринять?
Artem
А explain что показывает при запросе?
Ну что индекс подхватывает, но не тот, который нужен)
Artur
Работаю с mongoose библиотекой и проблема при создании объекта в базе данных mongodb. Ошибка: Error creating user: TypeError: Converting circular structure to JSON --> starting at object with constructor 'ClientRequest' | property 'agent' -> object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | ... | index 0 -> object with constructor 'TLSSocket' --- property '_httpMessage' closes the circle at JSON.stringify (<anonymous>) Код async createUser(data: UserCreationRequest): Promise<UserFullData> { try { const UserModel = await this.getUserModel(); const newUser = new UserModel(data); const savedUser = await newUser.save(); console.log(`User created: ${JSON.stringify(savedUser.toObject())}`); console.log( `Mapped user to UserFullData: ${JSON.stringify({ id: savedUser.id, // Виртуальное поле id, автоматически становится строкой contactEmail: savedUser.contactEmail, resellerNotes: savedUser.resellerNotes, username: savedUser.username, password: savedUser.password, messageSent: savedUser.messageSent, startDate: savedUser.startDate, bouquetsSelected: savedUser.bouquetsSelected, })}`, ); return { id: savedUser.id, // Виртуальное поле id, автоматически становится строкой contactEmail: savedUser.contactEmail, resellerNotes: savedUser.resellerNotes, username: savedUser.username, password: savedUser.password, messageSent: savedUser.messageSent, startDate: savedUser.startDate, bouquetsSelected: savedUser.bouquetsSelected, }; } catch (error) { console.error('Error creating user in MongoDB:', this.safeErrorLog(error)); throw new CustomError('Failed to create user', 500); } } import mongoose, { Model, Schema } from 'mongoose'; import { UserFullData } from '@app-types/userTypes'; const UserSchema: Schema<UserFullData> = new Schema( { contactEmail: { type: String, required: true }, resellerNotes: { type: String, required: true }, username: { type: String, required: true, unique: true }, password: { type: String, required: true }, messageSent: { type: String }, startDate: { type: String }, }, { toJSON: { virtuals: true }, // Ensures virtual fields are included in JSON responses toObject: { virtuals: true }, }, ); // Virtual to map `_id` to `id` as a string UserSchema.virtual('id').get(function () { return this._id.toString(); }); const User: Model<UserFullData> = mongoose.models.User || mongoose.model<UserFullData>('User', UserSchema); export default User;
Kirilll
Ну что индекс подхватывает, но не тот, который нужен)
кроме этого в планах есть нужный индекс?
Artem
кроме этого в планах есть нужный индекс?
Один из двух. Который за 7с, а второй, который за 1с не хочет появляться. Как будто планировщик его не видит. Индекс пересоздавали.
Artem
хинт конечно можно юзать, но оч опасно всегда)
Да, протестировать вариант, а в проде не вариант его использовать.
Kirilll
Один из двух. Который за 7с, а второй, который за 1с не хочет появляться. Как будто планировщик его не видит. Индекс пересоздавали.
спрошу на всякий) hideIndex индекс же нигде рядом вашем проблемным индексом не фигурирует?)
Kirilll
Не могу сказать. Проверю, отпишусь.
db.collection.getIndexes() ну и я бы тоже посмотрел на всякий есть ли он там
Artem
спрошу на всякий) hideIndex индекс же нигде рядом вашем проблемным индексом не фигурирует?)
в плане нигде нет такого явно есть , что используется "ненужный" индекс "indexFilterSet"=>false,
Kirilll
ну пока все выглядит очень странно может очепятки в индексе/названии поля? как будто бы проблема где то на поверхности, ни разу не сталкивался и не слышал, чтобы монга просто игнорировала обычный не скрытый индекс
Kirilll
кириллица вдруг)
mylifestyle
Друзья, в Beanie при получении доков из базы я получаю текстовые поля "_id". Есть ли встроенный способ сразу получить преобразованнный id?
mylifestyle
А как в Beanie искать с помощью регулярных выражений? Никак не могу понять.
mylifestyle
Разобрался, если кому поможет ...find.(Model.name == regex)
mylifestyle
странно, не думал, что так оно будет работать
Nick
Реально так?
На больших объемах да, на мелких еще хоть както можно использовать если в базе есть нативная поддержка как в постгре например, но в монге это гемор и стоит отказываться
Experimentalist