Antonina
Всем привет! У меня есть приложение на node экспрессе и я хочу привязать подключение к монго в глобальную переменную, чтобы с любой точки проекта смочь выбрать данные. Какие подводные?
Aʟᴇx
Если ты собираешься с разных мест стучаться в базу, то есть риск, что потом запутаешься. В самой переменной окружения ничего плохого нет
Antonina
Не будет проблем с подклбчением? Одно подключение для всех получается
Aʟᴇx
Не будет проблем с подклбчением? Одно подключение для всех получается
Нет, не одно подключение. Один URL, но подключений может быть много
Aʟᴇx
Звучит как "пишу на коленке без архитектуры и не знаю где нужна будет база"
В любом случае нужно помочь, не всегда же нужна "архитектура" 🙈
Egor
Всем привет! У меня есть приложение на node экспрессе и я хочу привязать подключение к монго в глобальную переменную, чтобы с любой точки проекта смочь выбрать данные. Какие подводные?
Глянь примеры простые на гитхабе, обычно если это орм, то там все за тебя делается, если же клиент монги, то в принципе точно так же, инициализируй клиент с креденшелами и экспортируй его из файла (жс модуля), и по своим задачам используй
S
здравствуйте, при удалении юзера должен очистить все связанные с ним коллекции куда я присваивал object id, куда копать?
Alex
В свой код
Alex
У монги нет связей как таковых
Alex
Все на уровне кода нужно делать
Adel
Добрый день, не могу понять как мне обновить документ с несколькими вложенностями. Есть документ: { name: 'Name document', subdocs: [ { name: 'Name subdoc', array: ['a', 'b', 'c'] } ] } Как обновить через mongoose элемент 'a' массива у поддокумента 'Name subdoc'? Сразу прошу прощения за, возможно, глупый вопрос. Но не понял как правильно обновлять подобные вложенности.
Aʟᴇx
Можете, пожалуйста, подсказать более лучше вариант схемы?
Окей, представь у нас есть юзер и статья. Юзер может быть автором нескольких статей, поэтому статья будет выглядеть так: { name: String; author: ObjectID; } А юзер вот так: { name: String; } В итоге, когда нам нужно обновить статью с именем a, нужно просто написать: db.articles.updateOne({"name": "a"}, {"$set": ...})
Aʟᴇx
https://docs.mongodb.com/manual/applications/data-models/ Много раз кидали, это будет не лишним
Anonymous
Всем привет, можно задам сферический вопрос какую базу взять под кейс (postgres или mongo) микросервис shop обычный магазин как везде, в котором есть сущности - продавец - товар - сделки
Tsikhan
Всем привет! Подскажите пожалуйста почему на мастере и на слейве монги сильно отличаются размеры окна оплога? и как это можно исправить?
Dmitry
Всем привет, кто-нибудь знает как, используя MongoDB Compass и просматривая коллекцию посмотреть самые последние документы? Сейчас: приходится в ручную «прощелкивать» по 20 элементов, получается если нужен документ №1000 то приходится жать 50 раз кнопку «вперед» ((
Bulat
Всем привет, кто-нибудь знает как, используя MongoDB Compass и просматривая коллекцию посмотреть самые последние документы? Сейчас: приходится в ручную «прощелкивать» по 20 элементов, получается если нужен документ №1000 то приходится жать 50 раз кнопку «вперед» ((
Рядом с кнопкой "Find" есть options - разверни поле поиска. Ты увидишь skip и limit - в скипе поставь, с какого номера хочешь посмотреть коллекцию. Если из коллекции в 1000 документов хочешь посмотреть последние 20 - укажи в скипе 980.
Aʟᴇx
Как вариант
Dmitry
Каждый раз приходится логин-пароль и хостнейм забивать - неудобно
Aʟᴇx
И к тому же там последние подключения сохраняются
Dmitry
И к тому же там последние подключения сохраняются
Спасибо! Добавил в фавы. В рисентах почему-то приходилось лог-пасс заново вбивать. С фавами все ок
Anonymous
Приветствую. В коллекции хранятся доки вида { timestamp: <value> }. Как вернуть список всех уникальных timestamp и их количества? Т. е. массив объектов вида { timestamp: <value>, entries: <кол-во_timestamp_в_коллекции> } Значение timestamp, для которого ищем кол-во вхождений, приходит на запросе. Сейчас делаю так: const entries = await Subscription .find({ timestamp: req.params.timestamp }) .countDocuments(); // .limit(parseInt(req.params.limit, 10)); res.status(200).json({ timestamp: parseInt(req.params.timestamp, 10), entries });
Anonymous
$group пробовал, но не сообразил, как его сдружить с потребностью принять timestamp из запроса.
Anonymous
Пробовал const entries = await Subscription .aggregate([ { $project: { timestamp: req.params.timestamp, count: 7 }} ]); count: 7 было для теста. Такой запрос вернул список всех timestamp с их моного _id.
Anonymous
Поделитесь кодом решения?
Aʟᴇx
https://docs.mongodb.com/manual/reference/operator/aggregation/group/ db.articles.aggregate( [ { $group: { _id: "$_id", count: { $sum: 1 } } } ] )
Aʟᴇx
Думаю, что это именно оно
Anonymous
Возможно. Как в строку _id: "$_id" подать req.params.id? Мне нужны только те $_id, которые равны id из запроса. В моём случае это timestamp, не id.
Aʟᴇx
Возможно. Как в строку _id: "$_id" подать req.params.id? Мне нужны только те $_id, которые равны id из запроса. В моём случае это timestamp, не id.
Я не знаю как работает JavaScript, так что я вряд ли посоветую как передать какую-либо переменную, и не до конца понимаю вопрос
Serhii
всем привет, сделал такой агрегейшин, нужно добавить условие что если все месседжи с полем readBy не включают в себя user.id, то только в этом случае не включать результат в массив, в случае если хоть одно поле readBy пустое то включать элемент в массив [ { $match: { status: 'active', 'messages.readBy': { $nin: [user.id] } } } ]
Anonymous
Я не знаю как работает JavaScript, так что я вряд ли посоветую как передать какую-либо переменную, и не до конца понимаю вопрос
Нужно вернуть с бека массив объектов, в объекте timestamp, сматченный ($match) с таковым из запроса, и количество этих матчей (совпадений), т. е. количество timestamp, равных req.params.timestamp.
yopp
Всем привет! Подскажите пожалуйста почему на мастере и на слейве монги сильно отличаются размеры окна оплога? и как это можно исправить?
Проверить что размер оплога одинаковый. Он задается автоматически, в зависимости от размера блочного хранилища
Serhii
в текущем кейсе, если хоть одно поле readyBy включает данный айдишник, то обьект не возвращается
yopp
если же он разный?
Поменять размер. Если монга 3.6 и позже, то https://docs.mongodb.com/manual/tutorial/change-oplog-size/ Если 3.4 и раньше то https://docs.mongodb.com/v3.4/tutorial/change-oplog-size/
yopp
Ширина окна, да
Tsikhan
Ширина окна, да
спасибо большое!
yopp
В целом ширина окна это размер оплога / средний размер записи оплога. Если нет лага то ширина окна будет примерно одинаковой.
Anonymous
https://docs.mongodb.com/manual/reference/operator/aggregation/group/ db.articles.aggregate( [ { $group: { _id: "$_id", count: { $sum: 1 } } } ] )
count: { $sum: 1 } считает кол-во доков в возврате. Интересно, count: { $sum: true } возвращает count: 0 в коде ниже. const entries = await Subscription .aggregate([ { $match: { timestamp: parseInt(req.params.timestamp, 10) } }, { $group: { _id: "$timestamp", count: { $sum: 1 } }}, { $project: { _id: true, count: true }} ]);
Joseph
Ребят есть ли возможность перебрать массив в агрегатной функции с выходом по условию for или while ???
yopp
$reduce
yopp
Но break там нет
yopp
Вы можете вместо break ничего не делать в $cond
Anonymous
Есть массив Integer'ов. Как в Монге отправить этот массив с запросом? Сейчас у меня есть роут /api/subscriptions/prices/${tms}/${limit}, в котором для массива timestamps пробегаю по этому массиву и на каждом проходе отправляю текущее значение из массива (tms) в роут. Получается 50 отдельных запросов. Как отправить массив в 50 значений tms, т. е. весь массив timestamps?
Joseph
Вы можете вместо break ничего не делать в $cond
но он всеравно продолжет итерировать массив
yopp
Ну и пусть итерирует
yopp
Абсолютно нет
yopp
У вас конкретная проблема?
yopp
Расскажите
Joseph
Ну и пусть итерирует
а если там миллион записей а надо выйти на 10й
yopp
У вас миллион записей?
yopp
Тогда у вас нет проблемы
Joseph
Тогда у вас нет проблемы
резонно , просто хочется максимально оптемизировать
yopp
Не нужно
Joseph
Расскажите
Нужно находить пропуски в числовом массиве
yopp
Оптимизировать надо когда есть проблемы
yopp
Оптимизация без проблемы это грешновато
Joseph
Оптимизация без проблемы это грешновато
Хочется, что бы все было классненько )
yopp
Выжигайте в себе это желание
yopp
Make it work, make it right, make it scale.
yopp
Хотите сделать класненько, сначала сделайте чтоб ваш продукт работал
yopp
Классенько у вас всё равно не получится, потому что придут пользователи и все испортят. Класненько это make it right, когда вы уже знаете как ваш продукт используется.
yopp
А оптимизация имеет смысл только тогда, когда вы видите реальные проблемы с производительностью. Например я до выкатки в продакшен не особо парюсь об индексах
yopp
Когда данных накопится и станут видны паттерны запросов требующие индексов, тогда можно и насоздавать. Не работает с существующими большими датасетами, но большой существующий датасет уже подразумевает что вы увидите реальные проблемы ещё до выкатки в продакшен