Makar M.
$lookup
Makar M.
Но как по мне, лучше тут юзать SQL базу, а не натягивать сову на глобус
Makar M.
А монго ты можешь например скидывать сообщения юзеров, если нужно их сохранять
Makar M.
А вещи с чёткими и жёсткими связями лучше вынести в другое место
karakurt
я попробую
karakurt
Спасибо
Makar M.
Но как по мне, лучше тут юзать SQL базу, а не натягивать сову на глобус
Может тут есть эксперты монго которые докажут обратное, мб я и ошибаюсь
Makar M.
Спасибо
Нельзя никому верить, нужно пробовать и то, и то)
Makar M.
Не за что
karakurt
У меня уже написан этот чат на sql
karakurt
ну и там не очень получилось
karakurt
и решил тут как раз с монго познакомиться
Makar M.
ну и там не очень получилось
А в чём проблема была?
karakurt
да, я понимаю, но у меня у группового чата много всяких других полей: title, description, accessibility (public or private), invite_hash, join_by_request, join_by_link_count ПРосто в вопросе их не привел, чтобы упростить
ну первое это вот это а второе это при вытягивании списка чатов мне пришлось для каждого личного чата подтягивать собеседников (это типо n+1 или как там эта проблема называется)
Makar M.
А как ты подтягивал их так?)
Makar M.
Это же обычным джоином решается
karakurt
karakurt
Это же обычным джоином решается
возможно я затупил, надо посмотреть еще раз
Makar M.
И зачем для каждого личного чата все собеседники? Чатов могут быть сотни. Лучше это делать лениво, по мере скролла чатов
Makar M.
ты джанго знаешь?
Нет. Но там явно будут квери билдеры и возможность писать чистый sql
Makar M.
два личных чата?
karakurt
два личных чата?
не 2 участника в личном чате
karakurt
я не все сразу беру
karakurt
слушай, возможно там и вправду просто джоин нужен был
karakurt
пойду попробую
Makar M.
в личных их только 2
В таблице личных чатов ты можешь сразу хранить айди собеседника и по нему делать подзапрос или джоин, вытянув нужные тебе данные для отрисовки
Kvhqm
Выведите в консоль без обращения к индексу, и посмотрите глазками что там под индексом 1
wisp
при запуске монго на Ubuntu возникает ошибка. можете, пожалуйста, подсказать, как ее решить? ''' × mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: failed (Result: core-dump) since Sun 2023-10-08 14:17:41 UTC; 13s ago Docs: https://docs.mongodb.org/manual Process: 83049 ExecStart=/usr/bin/mongod —config /etc/mongod.conf (code=dumped, signal=ILL) Main PID: 83049 (code=dumped, signal=ILL) CPU: 12ms окт 08 14:17:41 srv01 systemd[1]: Started MongoDB Database Server. окт 08 14:17:41 srv01 systemd[1]: mongod.service: Main process exited, code=dumped, status=4/ILL окт 08 14:17:41 srv01 systemd[1]: mongod.service: Failed with result 'core-dump'. '''
of Astora 𒉭
убунту какая версия?
of Astora 𒉭
22.04
характеристики какие сервака?
wisp
6?
как в документации по установке написано, так и пытаюсь. вроде написано ласт версия и все
wisp
характеристики какие сервака?
сами комплектующие или мощность?
wisp
тестирую на виртуальной машине. выделил под нее 4 ядра и 4 озу.
Emil
привет, есть 40к документов в коллекции, пытаюсь избавиться от дублей, правильно ли все расписал? Просто не хочется методом тыка через дубликаты, это очень долго, подскажите пожалуйста
ilgir
Подскажите, долго ли будет делать поиск в базе данных по какому то параметру, условно админ true or false , если будет условно 500 объектов?
ilgir
О, спасибо
Alex
Есть 2 коллекции: users: {_id: 1, a: 1, b: 2} products: {_id: 1, records: [{userId: 1}]} Как написать аггрегацию для коллекции products, чтобы в records подтягивала информацию о пользователе по его ID (лукап)
Semyon
Привет, чат! Выручайте, вообще нет идей, почему так Раскладываю в аггрегации вложенный массив { some_array: [[ObjId1], [ObjId2, ObjId3]] } Такой вот этап { $addFields: { some_array: { $reduce: { input: '$some_array', initialValue: [], in: { $concatArrays: ['$$value', '$$this'], }, }, }, }, }, В шелле и в компасе работает, в монгусе под нодой валится с ошибкой MongoServerError: PlanExecutor error during aggregation :: caused by :: $concatArrays only supports arrays, not objectId Я не туда смотрел, ошибка на другом этапе была🫠
Alex
$lookup:{ from: users localfield: "records.userdId", foreignField: _id, as: users_info } в users_info будут юзеры подтянутые
Спасибо, но нужно их подтягивать в тот же объект в то же поле. Так можно?
Tetra
точнее можно, переписав его
Alex
точнее можно, переписав его
А как именно переписать?
Nick
Спасибо, но нужно их подтягивать в тот же объект в то же поле. Так можно?
А у вас сулчаем не монгус? там есть populate(), который это делает
Tetra
А как именно переписать?
переписать поле куда попадут результаты. в лукапе указать as: records
Alex
переписать поле куда попадут результаты. в лукапе указать as: records
Разве получится засунуть информацию в тот же объект
Tetra
Разве получится засунуть информацию в тот же объект
не в тот же, а просто перепишет сверху. Заменит все что было на подтянутое
Nick
Нет. У меня нативный nodejs-драйвер
Тогда остается только после лукапа зипнуть через $zip https://www.mongodb.com/docs/manual/reference/operator/aggregation/zip/
Alex
не в тот же, а просто перепишет сверху. Заменит все что было на подтянутое
А мне надо, чтобы в том же объекте id пользователя заменялся на сущность самого пользователя
Нуриддин
Как можно скопировать коллекцию на другую базу в том же ирстансе?
Tetra
А мне надо, чтобы в том же объекте id пользователя заменялся на сущность самого пользователя
такого чтоб автоматом не видел, поэтому и сразу написал что решения нет
Alex
такого чтоб автоматом не видел, поэтому и сразу написал что решения нет
Ну там же можно через unwind разложить, потом отлукапить, потом через group объединить обратно. Но мне почему-то такие махинации отдают пустой массив
Tetra
ну может как выше написали про $zip и туда еще потом через $reduce накрутить логики по трасформации. но это все проще в коде уже сделать
Tetra
Ну там же можно через unwind разложить, потом отлукапить, потом через group объединить обратно. Но мне почему-то такие махинации отдают пустой массив
значит гдето неправильно разложили или неправильно назад собрали. И у $unwind/$group есть енприятная особенность, если массив будет пустой или ничего не найдется в связанной коллекции то вы поулчите пустоту после анвинда
fenogentov
Использую mongodb-go нашел два примера использования транзакций session, _ := client.StartSession() callback := func(ctx mongo.SessionContext) (interface{}, error) { ... } session.WithTransaction(ctx, callback, _) session, _ := c.mongoClient.StartSession() session.StartTransaction() callback := func(sc mongo.SessionContext) error { ... } mongo.WithSession(ctx, session, callback) ``` Но нигде не используется session.AbortTransaction(ctx) Поковырялся в библиотеке, но не понял, откат происходит автоматически? Или все-таки аборт надо прикручивать?
Alex
https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#example-WithSession Это скорее для Go чята вопрос.
Alex
Внутри каждого if err != nil {} надо вызывать кароч.
Асель
Всем привет! ребят, кто-то пробовал сдавать? https://learn.mongodb.com/pages/mongodb-associate-database-administrator-exam я понимаю, что из РФ вроде как нельзя, но, может, в обход блокировки как-то можно..
Алексей
спамеры школотороны облюбовали почему то этот чат
Nick
да такто это много где происходит
Yaro
Добрый день, Вопрос про роли: mongo 4.2 Поставили юзеру роль dbAdmin Но команда collMod всеравно отклоняется Судя по доке роли dbAdmin должно быть достаточно для collMod Что не так? Спасибо
Алексей
не тому дали, не ту роль дали, не ту команду выполняет... можно еще предполагать
Алексей
роль достаточна
Алексей
не на ту БД))
Алексей
еще на system.* не будет работать, но наверное речь о простой коллекции
Yaro
не на ту БД))
Т.е. роль только на конкретную бд выставляется? Есть ещё dbAdminAllDatabases или как-то так Суть в том что много приложений используют одинаковую схему данных но в разных базах, т.е. желательно чтобы роль на все базы распространялась Коллекции пользовательские, конкретно это вьюхи
Алексей
да, dbAdminAnyDatabase - даст права дбАдмин на все бд кроме локал и конфиг