Serhii
а кто-то сталкивался с созданием транзакции для вложенных обьектов? то есть я сохраняю по очереди children, а в конце линкую с parent и надо чтобы если кто-то из children не сохранился то отменить всю транзакцию как я понял, так не работает
Rodion
Ребят, к вопросу об Id. Сильно принципиально хранить uuid в Binary представлении, или ничего страшного не будет если сохранять его в виде строки?
Rodion
Главная проблема двоичного представления состоит в том, что в Compass'e запрос придется делать не по текстовому значению uuid, а по его двоичному представлению в base64 - в общем, очень неудобно.
Дмитрий
Ребят, к вопросу об Id. Сильно принципиально хранить uuid в Binary представлении, или ничего страшного не будет если сохранять его в виде строки?
Я использую на проекте свои собственные текстовые uuid, ничего страшного пока не случилось) По 100-300к документов в таблице, полёт нормальный. Если это люто неправильно, буду признателен за объяснения
Alex
есть разница как хранить строку в монго: binData or string(bson type)?
Nick
есть разница как хранить строку в монго: binData or string(bson type)?
если вы планируете просто хранить, то разницы особо нет, а вот в случае работы со строками при выборка для binData вы не сможете использовать функции для работы со строками
Youdgin
Ребята, а можно как-то в монго сделать, похожее на это SELECT *, accountName FROM, или в монго нужно тогда указывать все поля, которые необходимы ?
Nick
спасибо. а если утф8 строку хранить как биндата - с этим могут быть проблемы?
при хранении - нет, просто поток байт будет и как вы с ним работать будете в своем коде это уже к монге отношения не имеет
Alex
при хранении - нет, просто поток байт будет и как вы с ним работать будете в своем коде это уже к монге отношения не имеет
просто с string type будет тот же поток байтов +АПИ для работы со строками от монго если я правильно вас понял
Alex
при хранении - нет, просто поток байт будет и как вы с ним работать будете в своем коде это уже к монге отношения не имеет
а монго бинарные данные при хранении как string type валидировать на соответствие утф8 никак не будет до вызова string API?
Alex
зачем вы об этом думаете? ест ькакаят оспецифическая задача?
у меня для одного поля может быть текст или бинарные данные. думаю взять для него общий тип. АПИ монго пользоваться не планирую. хочу сейчас точно определиться, потому что БД уже в продакшн
Youdgin
странный синтаксис, у вас accountName итак под звездочкой выдаст. Зачем дублирвоать?
accountName у меня высчитывается по condition, но так же и нужны все филды
Alex
сделайте два поля
у меня это содержимое web страницы. там может быть строка при text/plain или бинарные данные при пдф, док и тд. два поля не лучшая идея имхо
Nick
accountName у меня высчитывается по condition, но так же и нужны все филды
$addFields в агрегациях просто добавит рассчитываемое поле
Nick
у меня это содержимое web страницы. там может быть строка при text/plain или бинарные данные при пдф, док и тд. два поля не лучшая идея имхо
как видите у вас уже возникла проблема на стадии выбора типа колонки, что будет когда вы начнете с ней работать? И это вместо того чтобы сказать что если поле тип pdf то поле pdf_data заполнено, а если тип текст то text_data
Nick
и кстати для пдф напомню что в монге ограничение на размер документа 16Мб, если пдф будет вылезать за эти размеры, то его сохранить в дока не поулчится
Nick
для хранения файлов и любых других больших данных в монгу используйте gridfs
Nick
если разница только в Монго АПИ для строк, проблем не вижу
если вам только хранение, то действительно разницы нет
Alex
а как в Монго вывести тип для существующего поля в документе коллекции?
Alex
не могу нагуглить
Alex
https://docs.mongodb.com/manual/reference/operator/aggregation/type/
спасибо большое за консультацию. сэкономили мне кучу времени
Alexandr
Ребята, почему-то данный код не обновляет данные, пробовал в монго атлас и локально в компасе, использую монгус. const recipientBalance = await findUser .findOne({ email: recipient }, { balance: 1 }) .lean(); console.log(recipientBalance.balance); const user = await findUser.findOneAndUpdate( { email: recipient }, { $inc: { balance: 777 } }, { new: true } ); console.log(user); Я значит нахожу пользователя и его баланс, это работает нормально, а затем пытаюсь изменить баланс на 777, баланс не меняется. Ошибок также не получаю.
Alexandr
findUser это у тебя модель? покажи схему
привет, мне здесь уже подсказали, похоже я накосячил с названием монгус схем, сделав их с одинаковыми названиями, сейчас я переделаю и отпишу если не поможет. Еще раз, спасибо за помощь.
Alexandr
привет, мне здесь уже подсказали, похоже я накосячил с названием монгус схем, сделав их с одинаковыми названиями, сейчас я переделаю и отпишу если не поможет. Еще раз, спасибо за помощь.
В итоге заработало, оказалось, что всему виной это одинаковые названия монгус схем, что я использовал. Меня видать один видео курс запутал, там говорилось следующее, что дескать если у нас коллекция называется users, то схема должна называться User так как потом User превратится во множественное число с маленькой буквы: users, почему это так я и сейчас не до конца понял, но суть в том, что основываясь на этой информации я создал несколько схем для документов в одной коллекции и назвал их все User, так как подумал раз коллекция называется users.
Purple Hero🍅
Здравствуйте. Делаю с одним человеком проект на python в котором используем pymongo. Как я могу создать базу данных на сервере, чтобы мой друг мог пользоваться данными из бд?
Anonymous
Нужно управлять базой данных на удалённом сервере?
Anonymous
На какой ОС работаете?
Purple Hero🍅
Линукс убунту
Anonymous
Вам нужно подключиться к серверу командой в терминале: ssh -L 8888:127.0.0.1:27017 IP_Сервера А потом в компасе подключиться по адресу 127.0.0.1:8888
Purple Hero🍅
Компасе? Мы работаем без него, только через питон
Anonymous
Ну тогда нужно указать адрес подключения mongodb://127.0.0.1:8888
Purple Hero🍅
Ага, понял
Purple Hero🍅
Попробую
Anonymous
Если закрыть терминал с SSH, соединение пропадёт
lmn
Можно накатить тмукс на сервак и сохранять/восстанавливать контекст сессий) хотя тут врядли судо есть судя по вопросам
Anonymous
на внешний айпи повесить если такой есть. если нет, то пробросить порт с внешнего айпи
Это не безопасно, т.к. в MongoDB по умолчанию отключена авторизация. То есть кто угодно сможет зайти в базу
Anton
Ребзя, посоветуйте какой лучше использовать тип авторизации в монгу, чтобы максимально безопасно было?
Anton
Двухфакторная, или по смс 🤔
Мля аутентификация*
Joe
Двухфакторная, или по смс 🤔
На каждый гет запрос! И чтобы смс коды хранились в той же базе!
Р
Кто может посоветовать курс по Mongobd + node js, только Гошу Дударя не говорите
Qahramon
Кто-нибудь работал с балансами? У меня есть способы оплаты, такие как наличные, карта и т. Д., А также валюты. Как я могу эффективно это сохранить?
Leo
Всем привет! Нужна помощь в составлении запроса, ибо у самого мало что получается( Дана структура такого вида: { "_id" : ObjectId("5e31cc9d95f5730b4b108224"), "name" : "gwname", "active" : true, "network" : { "interfaces" : { "eth0" : { "name" : "eth0", "alias_ids" : [ "58a5e35402ce1c5f615ffbe9" ], "interface_class" : "PhysicalInterface", }, "eth1" : { "name" : "eth1", "alias_ids" : [ "58a5e35802ce1c5f615ffbec" ], "interface_class" : "PhysicalInterface", }, "eth2" : { "name" : "eth2", "has_db" : false, "alias_ids" : [ "58a5e35d02ce1c5f615ffbef", "5e32c1600d3c8391cb62408d" ], "interface_class" : "PhysicalInterface", } } } } Мне нужно получать только имя имтерфейса ( который в массиве "name" : "eth...",) по значению alias_ids (изначально известно только это значение). Я пробовал решить проблему с помощью подобной функции // пример поиска по имени интерфейса, который работает db.gws.find( { $where: function() { for (var field in this.network.interfaces) { if (this.network.interfaces[field].name == "eth-mgmt") return true; } return false; } } ) но, к сожалению, я так и не смог придумать, как можно провалиться в массив для выборки для того чтобы получить то что нужно. В дальнейшем этот id будет использоваться в bash скрипте.. Подскажите плииз, как лучше подступиться к этой задаче? Спасибо
Leo
ну основная моя сложность - незнание java и очень плохое знание mongo я пробовал делать подобным образом, но явно это не правильно, ибо возникает ошибка db.gateways.find( { $where: function() { for (var field in this.network.interfaces) { for (var field2 in this.field) { print (this.field2); if (this.field2 == "58a5e35d02ce1c5f615ffbef") return true; } } return false; } } ) так же пытался ткнуть туда $elemMatch, чтобы искать по содержимому массива, но тоже не работало
Михаил
1. NoSQL а не Non-SQL 2. Если тебе нужно реализовать отношение один ко многим, то лучше использовать реляционную базу. NoSQL не для этого предназначен. 3. Если уж все же совсем нужно, то да, можешь.
Михаил
Так ещё раз, зачем тебе работать с Mongo как с реляционной базой?
Anton
Да, в случае с NoSQL упор идет на производительность взамен на избыточность данных. Иначе говоря «сохрани больше» нежели «избегай избыточности»
Михаил
Ну про прошлый век это чистый бред На счет избыточности и в целом подход к работе с данными - выше правильно написали.
Anonymous
Ребят, такой вопрос есть коллекция с пользователями. У каждого есть дата создания (Date). Как лучше реализовать так, чтобы можно было взять последние 30 дней и посчитать, сколько пользователей в какой день было создано?
Anonymous
Неужели нужно брать 30 последних дней, преобразовывать их в Date и слать 30 запросов .count() в MongoDB?
Kirill
Неужели нужно брать 30 последних дней, преобразовывать их в Date и слать 30 запросов .count() в MongoDB?
Можно и так... А можно попробовать аггрегацию с $group оператором
Anonymous
Нужно, чтобы по каждому дню можно было сочитать количество пользователей
Cloud
Ну как минимум можно послать 30 запросов в цикле, если вытягивать не все данные это не особо ресурсоемко будет ну или например аналог Promise.all в жс можно вытащить 1м запросом, а потом уже средствами ЯП, эти данные рассортировать возможно можно аггрегацией, к сожалению не секу за нее
Anonymous
А если документов несколько миллионов?
Anonymous
Ну окей. Спасибо
Alexander
Надеюсь, это был троллинг... Выше писали про аггрегацию с группировкой. Один запрос — готовый результат.
Leo
Всем привет! Нужна помощь в составлении запроса, ибо у самого мало что получается( Дана структура такого вида: { "_id" : ObjectId("5e31cc9d95f5730b4b108224"), "name" : "gwname", "active" : true, "network" : { "interfaces" : { "eth0" : { "name" : "eth0", "alias_ids" : [ "58a5e35402ce1c5f615ffbe9" ], "interface_class" : "PhysicalInterface", }, "eth1" : { "name" : "eth1", "alias_ids" : [ "58a5e35802ce1c5f615ffbec" ], "interface_class" : "PhysicalInterface", }, "eth2" : { "name" : "eth2", "has_db" : false, "alias_ids" : [ "58a5e35d02ce1c5f615ffbef", "5e32c1600d3c8391cb62408d" ], "interface_class" : "PhysicalInterface", } } } } Мне нужно получать только имя имтерфейса ( который в массиве "name" : "eth...",) по значению alias_ids (изначально известно только это значение). Я пробовал решить проблему с помощью подобной функции // пример поиска по имени интерфейса, который работает db.gws.find( { $where: function() { for (var field in this.network.interfaces) { if (this.network.interfaces[field].name == "eth-mgmt") return true; } return false; } } ) но, к сожалению, я так и не смог придумать, как можно провалиться в массив для выборки для того чтобы получить то что нужно. В дальнейшем этот id будет использоваться в bash скрипте.. Подскажите плииз, как лучше подступиться к этой задаче? Спасибо
Всем привет! Есть ли идеи как сделать подобный запрос? Или мой подход слишком сложный/неверный ?