Anonymous
ссылки на другую коллекцию - создать коллекцию чисто под ответы на комментаррии?
Anonymous
смысл какой в этом?
AstraSerg
смысл какой в этом?
Смысл в том, что максимальный размер документа 16 мегабайт
Anonymous
по мне так надо делать это одной коллекцией - Comments. при этом хранить во вложенном массиве не сам контент, а айдишники комментариев-ответов. вопрос - как это связать все?
Anonymous
и как быть с ответом на ответ к комментарию?? еще один массив вкладывать?))
Anonymous
а как быть с ответом на ответ к кответу к комментарию?
Anonymous
по любому должна быть практика как это должно быть устроено
Anonymous
по примеру реддит, если надо образец
Anonymous
там у них в данных светится типо parentID
AstraSerg
а как быть с ответом на ответ к кответу к комментарию?
А, так у вас не известно заранее сколько комментов и на что?
AstraSerg
Почитайте здесь https://docs.mongodb.com/ecosystem/use-cases/storing-comments/ может это то что вам нужно
Anonymous
спс, почитаю. если кто-то сталкивался с такой задачей, напишите плз
Anonymous
У меня запрос _id:req.params.typeId meals.id: req.params.mealId видает null
Anonymous
req.params проверил
Lev
У меня запрос _id:req.params.typeId meals.id: req.params.mealId видает null
Ещё не разобрался как это работает, но у меня на Node.js для поиска по _id нужно импортировать из пакета с драйвером метод ObjectId и конвертировать строки в ObjectId, тогда находит
Lev
Типа const { ObjectId } = require('mongodb') const id = ObjectId(mealId) db.collection...find({ _id: id })
Lev
Там meals._id
Мне как-то всё равно, главное мысль донести
Anonymous
Мне как-то всё равно, главное мысль донести
У меня без конвертирование в ObjectID работает
Lev
У меня без конвертирование в ObjectID работает
Если работает то почему ничего не находит? :)
Anonymous
Anonymous
Наверное ето потому, сто я юзаю монгус
Anonymous
Тупой Т9
Lev
Находит
Так если нул значит нет ничего по критериям
Lev
Наверное ето потому, сто я юзаю монгус
Ну монгусь сам конвертит, да
Yaroslav
Товарищи привет, подскажите пожалуйста в чем может быть проблема , реплика сет не собирается . секнодари ноды не могут авторизоваться у primary UserNotFound: Could not find user test@admin Юзер такой создан rs0:PRIMARY> db.getUser("test") { "_id" : "admin.test", "user" : "test", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } В чем проблема не могу понять
SvPupok
а security file создан и один и тот же на всех нодах?
Заур
Предыдущий вопрос неправильный, он отменяется😀
Yaroslav
а security file создан и один и тот же на всех нодах?
эх поздно ты написал , сам до этого дошел когда начал копаться , содержание оказалось разным , но в любом случае спасибо за ответ )))
Denis
Всем привет! А есть какая-нибудь mongo админка, которую можно запустить в докере и настраивать доступы к коллекциям и БД?
Denis
А чем стандартные на десктопе не устраивают?
Эмм, у меня в kubernetes кластер. И там монга
Constantin
Я не силен в кубернетес, но разве к монге в нем запущенной, нельзя подключиться из вне кубернетеса?
Denis
Нет. Только форвардинг портов делать или vpn пробрасывать.
Constantin
Ну это я и имел в виду, вывести порт наружу с авторизацией, и подцепиться Атласом или Монгохабом
Denis
Это не всегда удобно.Но вопрос не про это. Монгохаб бесплатный клиент?
Constantin
Я так понимаю, вы хотите phpmyadmin, только для MongoDB?
倫太郎
а зачем тогда компас?
Denis
Я так понимаю, вы хотите phpmyadmin, только для MongoDB?
Да. Сейчас использую mongo-express, но там все базы открыты, а хотелось бы разграничения использовать и авторизацию
Constantin
Я кроме mongo-express ничего нормального не слышал, так чтобы еще и не совсем мертвое. Думаю остальное сильно хуже будет по функционалу.
Constantin
Да. Сейчас использую mongo-express, но там все базы открыты, а хотелось бы разграничения использовать и авторизацию
Вы можете, наверно создать пользователей N-количество, разграничить их правами, и поднимать отдельные инстансы под них
Constantin
Или использовать как мидлвару его, и написать небольшое NodeJS приложение, где по разным роутам будет доступ для разных пользователей
Constantin
Да проще наверное тогда с десктопной версией
Наверно, думаю большинство так и делает
Denis
Да проще наверное тогда с десктопной версией
Я создам пользователей с доступами к определенным базам.
Constantin
Да проще наверное тогда с десктопной версией
http://mongodb-tools.com может тут, что-то приглянется? https://nosqlclient.com, например.
Yaroslav
@f545_j_43g43u_jer3tfgu32fh3333 https://hub.docker.com/r/mongoclient/mongoclient/
Denis
@f545_j_43g43u_jer3tfgu32fh3333 https://hub.docker.com/r/mongoclient/mongoclient/
Да спасибо! Мне выше уже его подсказали
Заур
Народ, куда копать, как это делается? Операция обновления. Есть два условия. По первому условию из коллекции берём выборку документов. Теперь, если хотя бы один из документов не соответствует второму условию, отменяем весь процесс. Иначе, обновляем документы
Заур
А сделать выборку сразу по двум условиям?
Это не одно и тоже же. В моем случае первое условие для выборки, а второе для отмены ВСЕГО запроса
Заур
Например пользователь сказал обновить какие-то данные. Но оказалось, что к какому-то из полей одного из документов у него нет доступа. Отменяется всё обновление
Yurii
Например пользователь сказал обновить какие-то данные. Но оказалось, что к какому-то из полей одного из документов у него нет доступа. Отменяется всё обновление
Ну если у него нет прав на хоть один из документов, этот документ не должен прийти в выборке. Если он приходит в выборке - у тебя плохая архитектура
Yurii
Ты решаешь не ту проблему. Проблема в том, чтобы в выборке не пришло ничего лишнего. По этому вернусь к первому совету. 2 условия в выборку для обновления
Заур
Представь ты пытаешься массово обновить описание статей в каком-то блоге. И вдруг по определенным условиям ты не можешь получить доступ именно к тому параметру статьи, куда ты пытаешься дорваться у ОДНОЙ из статей. Хотя ко всем остальным параметрам имеешь доступ
Заур
И если такое стало, нужно откатить изменения во всех уже изменённых
Yurii
И если такое стало, нужно откатить изменения во всех уже изменённых
я б все-таки сделал так, что все ограничивалось одной выборкой. Но если ты так не можешь, тогда тебе надо думать в сторону временной коллекции, куда ты пишешь обновленные данные, и если все успешно то переносишь в основную, или выгрузить все в память, там сделать все изменения, а потом уже записывать. Но второй вариант плохой количеством ресурсов, особенно, если у тебя будет много данных
Заур
Начал транзакцию, проверил все данные, если есть ошибка, отмена транзакции. Если все норм, делаю update. Конец транзакции
Заур
Два запроса. Но из-за транзакции и блокировки, это слишком долго. Но у меня есть подозрения что в монге это можно одним запросом сделать. Вот в чём вопрос
Max
Привет! кто-то сталкивался с тем что монга медленно выполняет запросы? либо же драйвер к ней ( node.js, mongoose). При чём по началу всё хорошо - скорость меньше 100 милисекунд, но через день-два скорость падает до 30 секунд. 1) Сервер и монга на aws-е в одном регионе. 2) Данных мало, меньше 10 Мб в сумме. 3) perfomans advisor на монге говорит что всё ок 4) На сервер тоже всё ок - ошибок нету, ресмурсов железки достаточно 5) Конфиг конекшена: { reconnectTries: 30, reconnectInterval: 500, poolSize: Number(process.env.DB_POOLSIZE) || 10, // process.env.DB_POOLSIZE = 20 socketTimeoutMS: 30000, keepAlive: true, useNewUrlParser: true, } 5) раньше грешил на то что я делаю подписку на ченж стрим в монге: const db = mongoose.connection; db.once('open', () => { console.log('db.once(open)') io.on('connection', (socket) => { log.info('Socket connected.'); const changeStream = db.collection('rides').watch(); changeStream.on('create', async () => socket.emit('drivers-map', await queryRidesCoordinates())); changeStream.on('change', async () => socket.emit('drivers-map', await queryRidesCoordinates())); }); }); но кажись проблема не в этом Может есть у кого идеи в чём может быть проблема?
Yurii
Привет! кто-то сталкивался с тем что монга медленно выполняет запросы? либо же драйвер к ней ( node.js, mongoose). При чём по началу всё хорошо - скорость меньше 100 милисекунд, но через день-два скорость падает до 30 секунд. 1) Сервер и монга на aws-е в одном регионе. 2) Данных мало, меньше 10 Мб в сумме. 3) perfomans advisor на монге говорит что всё ок 4) На сервер тоже всё ок - ошибок нету, ресмурсов железки достаточно 5) Конфиг конекшена: { reconnectTries: 30, reconnectInterval: 500, poolSize: Number(process.env.DB_POOLSIZE) || 10, // process.env.DB_POOLSIZE = 20 socketTimeoutMS: 30000, keepAlive: true, useNewUrlParser: true, } 5) раньше грешил на то что я делаю подписку на ченж стрим в монге: const db = mongoose.connection; db.once('open', () => { console.log('db.once(open)') io.on('connection', (socket) => { log.info('Socket connected.'); const changeStream = db.collection('rides').watch(); changeStream.on('create', async () => socket.emit('drivers-map', await queryRidesCoordinates())); changeStream.on('change', async () => socket.emit('drivers-map', await queryRidesCoordinates())); }); }); но кажись проблема не в этом Может есть у кого идеи в чём может быть проблема?
неправильные индексы, много навешал на модель монгуса... когда ты делаешь выборки, в местах, где не надо менять данные ты делаешь .lean() ?
Max
неправильные индексы, много навешал на модель монгуса... когда ты делаешь выборки, в местах, где не надо менять данные ты делаешь .lean() ?
нет, лин не делаю. там в коллекциях до ста рекордов не больше, индексов пока не создавал - пока не видно наверняка на что они нужны. да и я делаю .select() - по идее это должно обрезать лишние поля документов на уровне БД-шки
Max
да и опять таки - как этим обьяснить что перфоманс теряется со временем?
Max
я уже ума не приложу в чём трабла. поставил сервак пока на ребут каждые два часа (там даунтайм 5 секунд), незаметно, хотя это лютый костыль
Yurii
да и опять таки - как этим обьяснить что перфоманс теряется со временем?
ну из-за того, что нет индексов, скорее всего, монга пробует закешировать твои выборки, забывает память и своп, вот и получаешь проседание. Да, select - обрезает на момента базы, это правильно. Добавь ещё всюду lean, где нет изменений.
Max
а что к стати lean даёт?
Yurii
а что к стати lean даёт?
отвязывает твои данные из базы от монгуса, получаешь чистые обьекты. У нас выборка на 3.5к записей шла около 3 секунд, нативным драйвером - 0.7, а монгусом с lean() - 0.8
Max
отвязывает - это как?
Yurii
отвязывает - это как?
не можешь вызвать на объекте .save(), например