Alexander
Не, не понимаю. Что значит "природа объектов это подразумевает сама по себе"? Что изменится, если там будет обычный монгоайдишник?
Максим
Дело в том, что бизнес-требования почти всегда сводятся к описанию конечной, готовой концепции продукта. В реальном мире коллекции данных, обладающие нумерацией натуральных чисел (1, 2, 3...) встречается повсеместно. Логично предположить, что в таком случае часто возникает и необходимость в авто инкременте.
Видел я апи с инкриментальным урлом. Отличное решение. Можно спарсить все заказы и узнать адреса всех клиентов, количество даставщиков в штате, сколько заказов в день выполняют, как часто клиент делает заказ, фио доставщиков, какая текучка кадров и прочее. И всё с одного лишь урла --- оставьте отзыв о нашей работе.
Продолжайте делать автоинкримент и выставлять его наружу.
A
Alexander
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 права в базе?
Nick
Никита
Извиняюсь, криво скопировал. В запросе 2 префикса
Nick
и тогда еще проверьте равно после -u
Никита
Разве там нужно равно? Вроде оно должно ставиться, только если писать - -username=
Никита
Подставил свои данные, ошибка не пропала
Никита
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 как реализовать ?
Alexander
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 и он не принимает документ просто выходит из кабинета и у меня тоже статус поменяется же вид так ?
Anonymous
Google
На каждую отправку документа вы создаетн запись в базе данных
Я и так хочу сказать на каждый док сделать два копии по их ID и менять статусы но тогда в базе дубликатов будет много статусы разные но док одинаковый
Михаил
Google
Есть в базе два юзера User1 отправляет к User2 документ у User1 статус док SENT - и этотже док у User2 должен стоят received когда User2 принимает док accepted статусы у User1 и User2 должны поменятся в accepted
Михаил
У нас профессиональное сообщество, пожалуйста, относитесь ко всем участникам с уважением.
Сообщество необходимо для помощи другим участникам.
Здесь не принято посылать в гугл, предлагать почитать документацию или поискать на SO.
Уважаемый админ, есть вопрос, так как я тут новенький.
Как видно из вопросов участника чата, для того, чтобы точно ответить на поставленный им первоначальный вопрос, необходимо дополнительно рассказать про базы данных, их архитектуру, проектирование, рассказать про MongoDB, про mongoose и, возможно, про разработку backend логики.
Данные тексты будут продолжительными по времени, и явно выходят за рамки этого чата.
Как в таких случаях принято поступать? И не является ли неуважением к другим участникам чата задавать вопросы без базовых знаний?
Google
Уважаемый ( GooDNeTH ) спасибо зато что ответили на вопрос но ваш ответ не оптимальный вариант для решение задачи,
тут чат для профессиональное сообщество ( необходимо для помощи другим участникам )
А жаловаться это неправильно и не профессионально.
Google
Спасибо или благодарю за вашу потраченную время
Google
может кто найдётся который хорошо разбирается
Alexander
может кто найдётся который хорошо разбирается
скорее все проигнорят, так как ощущение, что вы сами ничего не сделали, прежде чем прийти с вопросом
+ выглядит не как «нужна помощь», а «сделайте за меня»
lutik
Уважаемый админ, есть вопрос, так как я тут новенький.
Как видно из вопросов участника чата, для того, чтобы точно ответить на поставленный им первоначальный вопрос, необходимо дополнительно рассказать про базы данных, их архитектуру, проектирование, рассказать про MongoDB, про mongoose и, возможно, про разработку backend логики.
Данные тексты будут продолжительными по времени, и явно выходят за рамки этого чата.
Как в таких случаях принято поступать? И не является ли неуважением к другим участникам чата задавать вопросы без базовых знаний?
Поддерживаю
Google
Михаил
Благодарю за вашу помощь
Я объясню позицию и извиняюсь если задел.
Мой ответ выше, он никак не связан с MongoDB и, соответственно, с тематикой этого чата. Когда Вы задавали вопросы, что первый, что уточняющий - мне показалось, что Вам недостает знаний не конкретно по MongoDB, а базовых знаний про работу с базами данных и backend разработке (поправьте, если я не прав). Соответственно, отвечая сейчас на вопросы не по теме чата, мы по-факту флудим и мешаем другим участникам чата.
Если нужно, можете написать в личку.
Это мое последнее сообщение на данную тему, прошу прощения у всех.
Alexander
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 настроен, порядок, проверяли много раз
работает работает, херак, перестает
могут ли быть лимиты в самой монге? куда смотреть?
Anonymous
Youdgin
Ребята, подскажите, пожалуйста, как реализовать сортировку в монго по типу
ORDER BY (case: status =Packing: 1 else 0) DESC, deliveryDate DESC
Youdgin
Никита
Добрый день, помогите пожалуйста с подключением к монге из скрипта пайтон. Пишу 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
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
🦋noteee
wertaer
no...
🦋noteee
wertaer
новая переменная...
wertaer
попробуй для начала, а потом узнаешь...
wertaer
ты спросил как это решить...
wertaer
я ответил...
🦋noteee
🦋noteee
wertaer
печально...