Alexander
Не, не понимаю. Что значит "природа объектов это подразумевает сама по себе"? Что изменится, если там будет обычный монгоайдишник?
Максим
Дело в том, что бизнес-требования почти всегда сводятся к описанию конечной, готовой концепции продукта. В реальном мире коллекции данных, обладающие нумерацией натуральных чисел (1, 2, 3...) встречается повсеместно. Логично предположить, что в таком случае часто возникает и необходимость в авто инкременте.
Видел я апи с инкриментальным урлом. Отличное решение. Можно спарсить все заказы и узнать адреса всех клиентов, количество даставщиков в штате, сколько заказов в день выполняют, как часто клиент делает заказ, фио доставщиков, какая текучка кадров и прочее. И всё с одного лишь урла --- оставьте отзыв о нашей работе. Продолжайте делать автоинкримент и выставлять его наружу.
Максим
OWASP как раз описывает данную уязвимость как довольно частую проблему https://wiki.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References
Смотрел доклад один. Там говорилось что даже обжектид монговский нельзя наружу выставлять так как его можно достаточно легко подобрать. Но это касалось видимо старой его версии. Сейчас он немного по-другому формируется, более рандомно.
Nick
Ну к примеру, в текущей проекте у меня возникла такая необходимость. В системе существуют некие объекты, обладающие порядковой нумерацией. Причем это даже не прихоть бизнеса, это само по себе логично, природа объектов это подразумевает сама по себе. Для решения проблемы авто инкремента мне пришлось сделать _id кастомным, который состоит из префикса и как раз таки порядкового номера. Соответственно, при вставке нового документа, при конкурирующем write, если 2 человека будут добавлять 2 дока с одинаковым порядковым номером в айдишнике, неизбежно возникнет конфликт записи с одним документом, а другой добавится успешно. Я перехватываю ошибку, и запускаю функцию заново. Поймите, тут речь не о том, что это жизненная необходимость, без которой программисты не могут монгу использовать. Это просто та фича, которая бы сделала жизнь проще.
и весь этот гемор решается получением идентификатора дока после вставки и не нужно ни обрабатывать дубликат, ни повторно запрос делать, ни расхлебывать потом потенциальные проблемы с рекурсивными запросами
Nick
Дело в том, что бизнес-требования почти всегда сводятся к описанию конечной, готовой концепции продукта. В реальном мире коллекции данных, обладающие нумерацией натуральных чисел (1, 2, 3...) встречается повсеместно. Логично предположить, что в таком случае часто возникает и необходимость в авто инкременте.
в современном мире вы как разрабочик продукта можете сказать, что это плохое решение и донести это до бизнеса и вместе с ними скорректировать требования. Главное вот это самое упрощение кода, уменьшение накладных расходов, снижение вероятности появления ошибок, надо перевести в денежный эквивалент (реальные затраты разработки, сопровождения, риски и тп) и вот эти деньги как раз аргумент для общения с бизнесом
Никита
Добрый вечер. Проблема с mongoexport. На мой запрос mongoexport -h 10.0.0.3:27017 -d mybase -authenticationDatabase=admin -u ”my_user” -c users --type=csv -o users.csv Получаю Failed: (Unauthorized) not authorized on mybase to execute command { listCollections: 1, filter: { name: "users" }, lsid: { id: UUID("") }, $db: "mybase”, $readPreference: { mode: "primaryPreferred" } }
Никита
В чем может быть проблема?
Никита
Может быть дело в том, что у меня только ReadOnly права в базе?
Никита
Извиняюсь, криво скопировал. В запросе 2 префикса
Nick
и тогда еще проверьте равно после -u
Никита
Разве там нужно равно? Вроде оно должно ставиться, только если писать - -username=
Nick
Разве там нужно равно? Вроде оно должно ставиться, только если писать - -username=
пример из доки mongoexport --host=mongodb1.example.net --port=27017 --username=someUser --authenticationDatabase=admin --collection=contacts --db=marketing --out=mdb1-examplenet.json
Никита
Подставил свои данные, ошибка не пропала
Никита
mongoexport --host=10.0.0.3 --port=27017 --username=analytic_exporter --authenticationDatabase=admin --collection=users --db=maecenas --out=users.csv Enter password: 2021-07-26T19:38:36.252+0200 connected to: mongodb://10.0.0.3:27017/ 2021-07-26T19:38:36.253+0200 Failed: (Unauthorized) not authorized on maecenas to execute command { listCollections: 1, filter: { name: "users" }, lsid: { id: UUID("5e75f795-e686-432f-9ded-9869dd86e3fe") }, $db: "maecenas", $readPreference: { mode: "primaryPreferred" } }
Никита
Пытался коннектиться через URI, ошибка всё та же
yopp
Проверьте какой скоуп прав у этого пользователя
yopp
Возможно указанная коллекция не попадает в этот скоуп
Никита
Я имею к ней доступ, если зайду в базу
Никита
Могу вывести ее в консоль
Никита
Может есть способ записать все файл без mongoexport? А через mongo shell
Google
Всем привет можете мне помочь как можно реализовать У меня есть юзер хочу сделать так - есть документ хочу отправить другому юзеру я отправляю SENT и у меня статус документа становиться SENT - а когда другой юзер заходит свой кабинет у него должен стоят статус RECEIVED, если он принимает документ ACCEPTED и уменя и унего статусы должны поменятся статусы ACCEPTED как сделать такой запрос ? Mongodb база и schema
Google
Google
2. Когла другой юзер зашел в свой профиль обновляешь всем документам что ему прислали статус на ресивд КАК ОБНОВИТЬ ?
Google
DB Schema как реализовать ?
Google
Нет для себя делаю
Google
можете помочь >?
Google
Составить правильный Schema
Google
Получается в базе одинаковый документ с разнами статусами будет сохронятся >?
yopp
У нас профессиональное сообщество, пожалуйста, относитесь ко всем участникам с уважением. Сообщество необходимо для помощи другим участникам. Здесь не принято посылать в гугл, предлагать почитать документацию или поискать на SO.
Михаил
можете помочь >?
1. Создаете 2 файла, например user.model.js и document.model.js 2. Описываете через new mongoose.Schema какие поля у вас есть у юзера и документа, в частности, у документа должно быть поле status у которого enum с описанными вами статусами, конвертируете схему в mongoose.model и экспортируете из файла. 3. Создаете сервисы, которые будут проверять и выставлять статусы 4. Когда пользователь отправляет документ, вы в сервисе пишете примерно такую логику: const recipient = await userModel.findOne({login: recipientLogin}) const newDocument = await documentModel.create({status: 'SENT', from: userId, to: recipient._id}) 5. Когда получатель заходит на страницу с документами, то фронт отправляет запрос на обновление статуса. В этом сервисе вы пишите const recievedDocument = documentModel.updateOne({_id: documentId}, {$set: {status: 'RECIEVED'}}, {new: true}) 6. Когда пользователь принимает документ, вы пишете в третьем сервисе примерно такое const acceptedDocument = documentModel.updateOne({_id: documentId}, {$set: {status: 'ACCEPT'}}, {new: true})
Google
1. Создаете 2 файла, например user.model.js и document.model.js 2. Описываете через new mongoose.Schema какие поля у вас есть у юзера и документа, в частности, у документа должно быть поле status у которого enum с описанными вами статусами, конвертируете схему в mongoose.model и экспортируете из файла. 3. Создаете сервисы, которые будут проверять и выставлять статусы 4. Когда пользователь отправляет документ, вы в сервисе пишете примерно такую логику: const recipient = await userModel.findOne({login: recipientLogin}) const newDocument = await documentModel.create({status: 'SENT', from: userId, to: recipient._id}) 5. Когда получатель заходит на страницу с документами, то фронт отправляет запрос на обновление статуса. В этом сервисе вы пишите const recievedDocument = documentModel.updateOne({_id: documentId}, {$set: {status: 'RECIEVED'}}, {new: true}) 6. Когда пользователь принимает документ, вы пишете в третьем сервисе примерно такое const acceptedDocument = documentModel.updateOne({_id: documentId}, {$set: {status: 'ACCEPT'}}, {new: true})
Вопрос а если другой пользователь заходит и идёт запрос и меняется статус на RECEIVED и он не принимает документ просто выходит из кабинета и у меня тоже статус поменяется же вид так ?
Михаил
Вопрос а если другой пользователь заходит и идёт запрос и меняется статус на RECEIVED и он не принимает документ просто выходит из кабинета и у меня тоже статус поменяется же вид так ?
На каждую отправку документа вы создаетн запись в базе данных Для другого пользователя будет другая запись Если вы имеете в виду что на одну страницу с документами будут заходить разные люди, то проверяйте по токену например айдишник и если он есть в to то толькл тогда обновьяете статус
Google
На каждую отправку документа вы создаетн запись в базе данных Я и так хочу сказать на каждый док сделать два копии по их ID и менять статусы но тогда в базе дубликатов будет много статусы разные но док одинаковый
Google
Есть в базе два юзера User1 отправляет к User2 документ у User1 статус док SENT - и этотже док у User2 должен стоят received когда User2 принимает док accepted статусы у User1 и User2 должны поменятся в accepted
Михаил
У нас профессиональное сообщество, пожалуйста, относитесь ко всем участникам с уважением. Сообщество необходимо для помощи другим участникам. Здесь не принято посылать в гугл, предлагать почитать документацию или поискать на SO.
Уважаемый админ, есть вопрос, так как я тут новенький. Как видно из вопросов участника чата, для того, чтобы точно ответить на поставленный им первоначальный вопрос, необходимо дополнительно рассказать про базы данных, их архитектуру, проектирование, рассказать про MongoDB, про mongoose и, возможно, про разработку backend логики. Данные тексты будут продолжительными по времени, и явно выходят за рамки этого чата. Как в таких случаях принято поступать? И не является ли неуважением к другим участникам чата задавать вопросы без базовых знаний?
Google
Уважаемый ( GooDNeTH ) спасибо зато что ответили на вопрос но ваш ответ не оптимальный вариант для решение задачи, тут чат для профессиональное сообщество ( необходимо для помощи другим участникам ) А жаловаться это неправильно и не профессионально.
Google
Спасибо или благодарю за вашу потраченную время
Google
может кто найдётся который хорошо разбирается
Alexander
может кто найдётся который хорошо разбирается
скорее все проигнорят, так как ощущение, что вы сами ничего не сделали, прежде чем прийти с вопросом + выглядит не как «нужна помощь», а «сделайте за меня»
Михаил
Уважаемый ( GooDNeTH ) спасибо зато что ответили на вопрос но ваш ответ не оптимальный вариант для решение задачи, тут чат для профессиональное сообщество ( необходимо для помощи другим участникам ) А жаловаться это неправильно и не профессионально.
Реализация такого механизма не должна быть в базе данных Есть 1 документ. User1 его отправил, User2 получил. У этого 1 документа статус общий для них обоих в базе Когда User1 получает данные о документе, сервис, который отдает данные смотрит, что user 1 - это отправитель, и у докумнта общий статус и в ответе заменяет статус на SENT Когда user 2 смотрит на данные документа, сервис смотрит что это получатель и статус общий и заменяет общий статус на ресивд Когда user 2 принтмает документ, общий статус меняется на акссепт и когба оба юзера смотрят на документ то сервис ничего не заменяет а отдает как есть Для user 3 и других можно заложить любую логикк которая вам нужна
Anonymous
скорее все проигнорят, так как ощущение, что вы сами ничего не сделали, прежде чем прийти с вопросом + выглядит не как «нужна помощь», а «сделайте за меня»
Смотрю хотя другие помогают, А ты сам что-то умеешь ? Он не просил сделать за меня просил помощь грамотные программисты знают а который как ты из себя делает инштейна будет так остоватся ☕️
Михаил
Благодарю за вашу помощь
Я объясню позицию и извиняюсь если задел. Мой ответ выше, он никак не связан с MongoDB и, соответственно, с тематикой этого чата. Когда Вы задавали вопросы, что первый, что уточняющий - мне показалось, что Вам недостает знаний не конкретно по MongoDB, а базовых знаний про работу с базами данных и backend разработке (поправьте, если я не прав). Соответственно, отвечая сейчас на вопросы не по теме чата, мы по-факту флудим и мешаем другим участникам чата. Если нужно, можете написать в личку. Это мое последнее сообщение на данную тему, прошу прощения у всех.
Alexander
Смотрю хотя другие помогают, А ты сам что-то умеешь ? Он не просил сделать за меня просил помощь грамотные программисты знают а который как ты из себя делает инштейна будет так остоватся ☕️
могу поделиться оч хорошей ссылкой — https://stackoverflow.com/help/how-to-ask она не только к SO applicable ps он Эйнштейн. каверкать фамилии подобных людей ну вообще не гуд
Leksey
ребят, помогите есть сервер A (node.js), есть сервер B (mongodb) сервер A подключается к серверу B все работает прекрасно но в один момент при подключении получаем следующее: failed to connect to server [IP:PORT] on first connect [MongoNetworkError: connect EADDRNOTAVAIL IP:PORT - Local (IP:PORT)] ошибка - EADDRNOTAVAIL ufw настроен, порядок, проверяли много раз работает работает, херак, перестает могут ли быть лимиты в самой монге? куда смотреть?
Youdgin
Ребята, подскажите, пожалуйста, как реализовать сортировку в монго по типу ORDER BY (case: status =Packing: 1 else 0) DESC, deliveryDate DESC
Nick
Ребята, подскажите, пожалуйста, как реализовать сортировку в монго по типу ORDER BY (case: status =Packing: 1 else 0) DESC, deliveryDate DESC
в агрегации перед сортировкой добавить стейдж $addField для добавления поля в котором будет высчитываемое поле по статусу. Потом уже по этому полю и деливериДейт сортировать
Никита
Добрый день, помогите пожалуйста с подключением к монге из скрипта пайтон. Пишу connect = MongoClient(f"mongodb://{usr}:${passw}@10.0.0.3:27017/?authSource=admin") Потом пытаюсь выполнить print(mongo.db.users.find_one()) На что получаю ошибку pymongo.errors.ServerSelectionTimeoutError: 10.0.0.3:27017: timed out, Timeout: 30s, Topology Description: <TopologyDescription id: 6100314a552bc85cbb6c4fa6, topology_type: Single, servers: [<ServerDescription ('10.0.0.3', 27017) server_type: Unknown, rtt: None, error=NetworkTimeout('10.0.0.3:27017: timed out')>]> Логин и пароль привожу к правильному формату при помощи urllib.parse.quote_plus, то есть все спецсимволы экранированы
x
Парни! Привет. Я на сайте монги создал тестовую базу. Как мне от неё реквизиты получить я что-то запутался. Желательно конекшн стринг
fλüggåɘnk∂€čhiœßøλ∫ên
ага
Создай базу -> юзера в database access -> и подключение в network access И в connect'е будет что ищешь
x
Спасибо) Ещё вопрос. Есть база в которой будут только данные авторизации. Одна таблица по сути. Норм ли монгу юзать или лучше посгрес?
Ярослав
У меня есть запрос аггрегации над $currentOp db.aggregate([{$currentOp: {allUsers: true}}, {$match: {secs_running: {$gt: 20}}}, {$project: {_id:0, host:1, client:1, appName:1, secs_running:1, op: 1, ns: 1, opid:1}}]).pretty() И я бы хотел затестить что запрос возвращает записи у которых secs_running больше 20. Но как я могу заранее "подложить" куда-то туда 😆записи чтобы сказать мол хэй, там есть запрос который висит уже 21 секунду) Желательно без db.events.find({$where: function() { return sleep(210) || true }}).pretty() В самом тесте)
Ярослав
Вообще есть ли какой-либо вариант.....
🦋noteee
Почему, если пользователь отправит 2-3 обновления моментально, то в БД он попадет несколько раз? Должен попасть только один раз. Тут что-то типо race condition и я не знаю как это решить. Использую Node.js mongoose
wertaer
no...
🦋noteee
no...
А что изменилось?
wertaer
новая переменная...
🦋noteee
новая переменная...
А что она дает то?
wertaer
попробуй для начала, а потом узнаешь...
wertaer
ты спросил как это решить...
wertaer
я ответил...
🦋noteee
ты спросил как это решить...
Твое решение не помогло
🦋noteee
wertaer
печально...
🦋noteee
печально...
Я же правильно все сделал?