Александр
для места в топе приходиться кешировать всех 16 миллионов уникальных ид-шников отсортированных по количеству нахождений в каждом массиве members, это ужасно, я уже всю голову сломал как сделать лучше и быстрее, может кто знает?
Александр
Александр
Александр
Может кому будет не понятно, вот вам пример: data: [{ chatId: 1, members: [12] }, { chatId: 2 members: [ 12, 22] }] результат getTopPosition({id: 12}): { id: 12, position: 1 // найден в 2 чатах } результат getTopPosition({id: 22}): { id: 22, position: 2 // найден в 1 чате }
Sergey spbsite
там лучше от редхатов брать для монги
Sergey spbsite
перфоманс - даже в доке написано
Sergey spbsite
всм
файловая система где стоит монга
Sergey spbsite
какая?
Sergey spbsite
ext4? тогда эт плохо
Александр
Sergey spbsite
не знаю, не смотрел
https://www.mongodb.com/blog/post/performance-best-practices-hardware-and-os-configuration
Sergey spbsite
Use XFS File Systems; Avoid EXT4 Use of XFS is strongly recommended to avoid performance issues that have been observed when using EXT4 with WiredTiger.
Nick
Может кому будет не понятно, вот вам пример: data: [{ chatId: 1, members: [12] }, { chatId: 2 members: [ 12, 22] }] результат getTopPosition({id: 12}): { id: 12, position: 1 // найден в 2 чатах } результат getTopPosition({id: 22}): { id: 22, position: 2 // найден в 1 чате }
делаете рядом табличку с топом, собсна возможно ваш кэш уже про это. И при вхождении в группу или выход обновляете счетчики в этой коллекции. Индекс на счетчик
Rustam
Привет! Пользуюсь Mongodb недавно подскажите как получить коллекцию db.system.profile в json файл например? сейчас делаю так, но там так же мусор из stdout mongosh "длиннаяСтрокаДляПодключенияКБд" —file ''script.js' > result.json В самом скрипте прописано какие поля забрать из профиля. Вытаскиваю данные из pipeline.$match
Rustam
думается лучший путь использовать клиент для монги и делать query вроде db.system.profile.find( ... ) подскажите куда копать?
Alexandrr
думается лучший путь использовать клиент для монги и делать query вроде db.system.profile.find( ... ) подскажите куда копать?
например, прежде всего, как и всегда, в доку: https://www.mongodb.com/docs/database-tools/mongoexport/
Rustam
например, прежде всего, как и всегда, в доку: https://www.mongodb.com/docs/database-tools/mongoexport/
да, видел, но не понял оно умеет в скрипты запускать?
Alexandrr
да, видел, но не понял оно умеет в скрипты запускать?
чего? какие скрипты и для чего тебе скрипты? у тебя задача - извлечь содержимое коллекции в формате .json не выдумывай того, что не нужно
Rustam
чего? какие скрипты и для чего тебе скрипты? у тебя задача - извлечь содержимое коллекции в формате .json не выдумывай того, что не нужно
Если бы не нужно было - я бы не запускал. Мне не нужна raw колекция, поэтому я запускаю скрипт и запрашиваю в бд только те поля которые мне нужны. Отсюда тот же вопрос не увидел в документации флаг для передачи скрипта в mongoexport может ли он запустить скрипт? Как лучше получить данные с выборкой в бд и записать в файл? Есть ли у кого нибудь такой опыт?
Easy Rider
Например вот
Easy Rider
Тут сказано что C# хранит время не так как надо
Easy Rider
а что такое драйвер?
Андрей
Элементы - документы? 🤨 Да - ттл индекс как правильно подкинул Александр
.
import datetime def decode(oid):     if len(oid) != 24:         print("Error: Invalid ObjectId")         return None     out = {}     out['oid'] = oid     out['ets'] = int(oid[0:8], 16)     out['mid'] = int(oid[8:14], 16)     out['pid'] = int(oid[14:18], 16)     out['uid'] = int(oid[18:], 16)     try:         out['fts'] = datetime.datetime.fromtimestamp(out['ets']).strftime('%d %b %Y %H:%M:%S')     except:         print("Error: Invalid timestamp")     return out decoded_id = decode('645bca35f7424eb305fc385c') print(decoded_id) Кто знал ето как код
yopp
Кто силен в mongodb и агрегациях в ней? Мне нужна агрегация которая из всех массивов members выносит вердикт о месте в топе. Весь массив в members получается в 56+ миллионов участников. Выполняется ну уж слишком долго. Даже с топ 10 ($limit не помогает)
К сожалению $unwind по массиву требует перебора всех документов в коллекции. Тут нет простого рецепта. Вероятнее всего, дешевле сделать ещё одну коллекцию где для каждого уникального member хранить нужный вам счётчик. И обновлять этот счётчик при изменении коллекции chats
yopp
Привет! Пользуюсь Mongodb недавно подскажите как получить коллекцию db.system.profile в json файл например? сейчас делаю так, но там так же мусор из stdout mongosh "длиннаяСтрокаДляПодключенияКБд" —file ''script.js' > result.json В самом скрипте прописано какие поля забрать из профиля. Вытаскиваю данные из pipeline.$match
Добавьте ключ --quiet, в этом случае там не будет технической информации, вы сможете полностью контроллировать вывод. Можно и find, но для этого вам надо сначала получить хендл коллекции с точкой в имени и уже потом делать через него find. В mongosh хендл получается через db.getCollection
yopp
чего? какие скрипты и для чего тебе скрипты? у тебя задача - извлечь содержимое коллекции в формате .json не выдумывай того, что не нужно
Я вас предупреждаю: уважайте других участников группы. У нас профессиональное сообщество построенное на принципе взаимопомощи. Хамство, грубость и другое токсичное поведение не допустимо и карается read-only.
yopp
Отдельно отмечу: «иди читай доку» или «погугли» — токсичное поведение и будет наказываться. Если вы знаете где в документации есть ответ на заданный вопрос — дайте ссылку на конкретный раздел документации и если требуется прокомментируйте на что именно стоит обратить внимание. Если вы заметили что в группе кто-то грубит, напишите мне или @yatoba, мы разберёмся
Rustam
Добавьте ключ --quiet, в этом случае там не будет технической информации, вы сможете полностью контроллировать вывод. Можно и find, но для этого вам надо сначала получить хендл коллекции с точкой в имени и уже потом делать через него find. В mongosh хендл получается через db.getCollection
Спасиб, добрый человек. Почитаю про флаги. Ps mongoexport не может скрипт запустить, но я как понимаю можно пайпом подсунуть файл-недоскрипт. И тут опять кажется проще в разы клиентом на js(в моем случае) сделать запрос и записать в файл.
yopp
Да, mongoexport и mongodump не поддерживают скрипты Не помню в каком формте mongosh по-умолчанию десериализует структуры для вывода. Возможно там будут невалидные в json токены типа ObjectId(...), DateTime(...) и пр. Делать это в отдельном js скрипте и писать из него файл наверное наиболее надёжное решение, так как вы можете контроллировать формат вывода
anatoly
Люди, только вчера начал переходить с скл на монго и наткнулся на одну штуку с "преобразованием" ответа в json я могу где-нибудь на уровне схемы указать монге что я хочу получать любой ответ с бд в виде жсона? меня и user = user.toJSON() устраивает но может есть решение обойтись без лишней строчки
.
object_id=('645bd555515a0b5033aaf209') Кто знал ето как справочник
wisp
можете поделиться запросом, который возвращает случайный документ из коллекции? или без помощи ЯП тут никак?
wisp
благодарю
Андрей
Кто-то использует для мониторинга шаблон MongoDB из поставки Заббикс 6?
Андрей
Использует
Написал в личку. Сталкивались с таким?
Комёб
Друзь привет! А можно ли запустить MongoDB в локальном сервере?
Александр «3OD1AK»
Привет! Ошибка с тем, что я из базы данных пытаюсь получить список access (скрин 1), Как я это делаю и что получаю в консоли - скрин 2 и 3. Потом я вывожу в консоль все ключи из того же club.access в консоль - скрин 4, но получаю все access без role (скрин 5). До этого я удалил из базы данных это поле (код - скрин 6), но почему-то оно удалилось неправильно и возвращаемся к началу вопроса — поле 'role' отображается в 1 console.log и не отображается во 2 console log. я не понимаю почему. Не подскажете?
Александр «3OD1AK»
Александр «3OD1AK»
Александр «3OD1AK»
Александр «3OD1AK»
Александр «3OD1AK»
Александр «3OD1AK»
И если я не по адресу, не подскажете чатик, куда этот вопрос можно задать?
Эска
не вижу на 6 скрине удаления из базы, только у объекта
Я удаляю это у объекта club.access, потом сохраняю club.save() в конце кода.
Эска
Таким способом добавил в объект в документ коллекции ещё одно поле, а удалить role не очень правильно получилось... :( Либо я че-то не так делаю.
Nick
Я удаляю это у объекта club.access, потом сохраняю club.save() в конце кода.
проверьте что save() с колбэком или с авайтом дергается
Назар
Всем привет. Такой вопрос. Есть Первая база монго. Нужно сделать вторую, и чтоб когда в первую что то пишут вторая была синхронизированна. Но не наоборот. И при этом, если вторая некоторое время недоступна, чтоб после этого все упущенные изменения применились. Какие есть варианты?
Андрей
Всем привет. Такой вопрос. Есть Первая база монго. Нужно сделать вторую, и чтоб когда в первую что то пишут вторая была синхронизированна. Но не наоборот. И при этом, если вторая некоторое время недоступна, чтоб после этого все упущенные изменения применились. Какие есть варианты?
Что такое первая, вторая базы? Внутри одного инстанса СУБД что ли? Зачем 2 одинаковые базы под одной крышей? 🤨 Онлайн варианты: кафка/кроль и т.п. или репликация. Всё остальное - регламентные переливки.
Андрей
репликация. Я имел ввиду 2 сервера отдельных нужно.
Вендорская кластер -> кластер реплика. https://www.mongodb.com/products/cluster-to-cluster-sync Оракловые золотые ворота. Кафка/кролик. Пиши в очередь, разгребай в обе базы отдельно. Стопнется монга - очередь насосётся, поднимется - рассосётся.
Nik
Подскажите плз ребят. Есть вот такая структура документа в Mongo class Config: schema_extra = { "example": { 'title': 'Name of project', 'description': 'About project', 'destination_to_metro': 1, 'name_of_metro_station': 'Name of metro station', 'delivery_date': { 'year': 2023, 'quartal': 1 }, 'flats': [ { 'flat_id': 1, 'status': 'on_sale', 'price': 10000000, 'space_m2': 100, 'number_of_living_rooms': 2, 'floor': 1, 'white_key': True } ] } } Можно ли как то написать запрос чтобы выбирать квартыры из всех документов по заданным фильтрам или нужно выносить квартиры в отдельный документ? Нужно что бы отдавал просто список квартир [{ 'flat_id': 1, 'status': 'on_sale', 'price': 10000000, 'space_m2': 100, 'number_of_living_rooms': 2, 'floor': 1, 'white_key': True }]
Artem
привет, читаю о том как засейвить данные в базу при завершении процесса ноды. Путем отлова выхода из процесса, тут окей, передали туда колбэк - окей. Но что за прикол с тем, что процесс получает сигнал о завершении, и запускает твой колбэк, и тебе надо успеть его выполнить до того как процесс завершился (а он уже получил сигнал о завершении), это условно рулетка: повезло - успел сохранить не повезло - не успел сохранить ?)
Nick
Подскажите плз ребят. Есть вот такая структура документа в Mongo class Config: schema_extra = { "example": { 'title': 'Name of project', 'description': 'About project', 'destination_to_metro': 1, 'name_of_metro_station': 'Name of metro station', 'delivery_date': { 'year': 2023, 'quartal': 1 }, 'flats': [ { 'flat_id': 1, 'status': 'on_sale', 'price': 10000000, 'space_m2': 100, 'number_of_living_rooms': 2, 'floor': 1, 'white_key': True } ] } } Можно ли как то написать запрос чтобы выбирать квартыры из всех документов по заданным фильтрам или нужно выносить квартиры в отдельный документ? Нужно что бы отдавал просто список квартир [{ 'flat_id': 1, 'status': 'on_sale', 'price': 10000000, 'space_m2': 100, 'number_of_living_rooms': 2, 'floor': 1, 'white_key': True }]
в агрегации сначала в $match общее условие для выборки подходящий доков с квартирами, потом $filter для отфильтровывания содержимого конкретного массива квартир и потом если надо через $unwind + $project дял поулчения в выдаче один док=одна квартира
Artem
скорее не закрываю риски, а при отключении/краше (ну мало-ли) сервиса, допустим необходимо оповестить группу клиентов о том, что сервис временно недоступен и записать некоторые данные в базу)
Nick
скорее не закрываю риски, а при отключении/краше (ну мало-ли) сервиса, допустим необходимо оповестить группу клиентов о том, что сервис временно недоступен и записать некоторые данные в базу)
опять же каким образом у вас оказались незаписанные данные? для этого надо как минимум держать какойто стейт, который почемуто меняется в обход БД
Artem
а если опустить запись данных, а оставить "надо разослать оповещения о приостановке" ?
Nick
а просто краш вы тоже хотите покрыть?
Artem
если он отдает перед закрытием сигнал и статус код ( а он отдает, насколько я понимаю) то, думаю, да
Nick
и обычно клиент просто видит 500/404/таймаут и сам понимает что сервис не работает
Nick
если он отдает перед закрытием сигнал и статус код ( а он отдает, насколько я понимаю) то, думаю, да
при краше ничего не отдает, на то он и краш что непредсказуем и прцоесс с прикладом просто помирает
Artem
при ошибках не отдает статус-код и сигнал завершения ?
Artem
да, понял, exit не отработает, а вот uncaughtException... )
Nick
конечно, краш с сегфолтом в лучшем случае в системном логе хоста пропишется, больше вариантов узнать об этом никак не поулчится (ну если мониторинга нет)). Аналогично потеря питания на хосте
Artem
угу, это понял
Artem
а допустим остановку процесса для обновления, если рассмотрим ?
Artem
или тех.работы
Artem
тут же сигнал явно пройти должен