Нуриддин
А как на них смотреть?
Алексей
ну у монги есть логи, лежат как в конфиге указано, а еще у линукса есть логи, а еще можно перед запуском подключиться к ноде и посмотреть что там с ресурсами под нагрузко
Нуриддин
Линкс логи в порядке
Нуриддин
У монги ещё не смотрел
Vista
Help Me!!!
Алексей
я просто тестирую свой апп тоже под нагрузкой и 1 гиг оперативы всего занято, 4 ядра правда
Ilya
Всем привет. Допустим, у меня есть коллекция users. Допустим, в документе user содержаться поля типо name, city, email, age... и.т.д. И допустим, что пользователь может запрашивать users с различными фильтрами поиска. Вопрос - какие под это всё дело строить индексы? Насколько я знаю, при построении составного индекса порядок имеет значение. А так же имеет значение сортировка. Это значит, что индекс {name: -1} != {name: 1}. А так же индекс {name: 1, city: 1} != {city: 1, name: 1}. А ведь пользователь может запрашивать users с абсолютно разными комбинациями доступных фильтров, и это естественно. И я вот представляю, какое кол-во комбинаций потенциально возможных индексов может быть для одного простого, по сути, тривиального запроса с фильтром просто по 4 полям, и понимаю, что тут что-то не так. Как быть?
Алексей
а сколько документов планируется в юзерс, полей именно столько?
Ilya
а сколько документов планируется в юзерс, полей именно столько?
Это абстрактный пример. Предположим, что достаточно большое, чтобы иметь необходимость построить индекс. Допустим, имеем вот эти 4 поля.
Nick
Всем привет. Допустим, у меня есть коллекция users. Допустим, в документе user содержаться поля типо name, city, email, age... и.т.д. И допустим, что пользователь может запрашивать users с различными фильтрами поиска. Вопрос - какие под это всё дело строить индексы? Насколько я знаю, при построении составного индекса порядок имеет значение. А так же имеет значение сортировка. Это значит, что индекс {name: -1} != {name: 1}. А так же индекс {name: 1, city: 1} != {city: 1, name: 1}. А ведь пользователь может запрашивать users с абсолютно разными комбинациями доступных фильтров, и это естественно. И я вот представляю, какое кол-во комбинаций потенциально возможных индексов может быть для одного простого, по сути, тривиального запроса с фильтром просто по 4 полям, и понимаю, что тут что-то не так. Как быть?
на самом деле достаточно по одному индексу на поле, а монга сама выберет лучший и по нему отфильтрует. Остальное уже чтением с диска. Чтобы это быстро работало закидываете побольше оперативы, чтобы все индексы помещались
Ilya
на самом деле достаточно по одному индексу на поле, а монга сама выберет лучший и по нему отфильтрует. Остальное уже чтением с диска. Чтобы это быстро работало закидываете побольше оперативы, чтобы все индексы помещались
То есть достаточно построить просто индекс {name: 1, city: 1, age: 1, email: 1}, и любой запрос, использующий эти 4 поля в любых комбинациях, будет использовать эффективно этот индекс? И если какой-то пользователь запросит {age: 18, name: "Иван"}, монга использует этот индекс, и переберет у себя в поиске только документы с точно такими значениями полей?
Алексей
3 индекса по 1 полю(без нейм), еще 2 компаунда нейм-сити и нейм-эйдж, так как их искать будут чаще всего. И то я бы посмотрел сколько там данных, и как советовали выше просто в оперативе все это вертел.
Nalik
Привет всем! Можно ли быстро подсчитать количество вхождений в агрегаторе? У меня проблема 1 в 1 с постом https://stackoverflow.com/questions/52505585/count-id-occurrences-in-other-collection
Nalik
Но единственное, мне нужно подсчитать количество вхождений в своей коллекции. Этот lookup очень медленно работает.. Индексы на полях chat_id, user_id, leave_time есть. const dbMyChats = await db.ChatsUser.aggregate([ { $match: { user_id: 1, leave_time: 0 } }, { $lookup: { from: 'chats_user', let: { chatID: '$chat_id' }, pipeline: [ { $match: { $expr: { $and: [{ $eq: ['$chat_id', '$$chatID'] }, { $eq: ['$leave_time', 0] }] } } }, { $count: 'count' }, ], as: 'chats', }, }, { $project: { _id: 0, chat_id: 1, count: { $arrayElemAt: ['$chats.count', 0] }, } }, ]);
Anton
Всем привет! Столкнулись с ошибкой при восстановлении полного бэкапа при помощи pbm restore <backup>: E11000 duplicate key error collection: sponsore.int index: id dup key: { _id: { visitorId: "ccee9f9e-9d05-4113-97b6-38bf85a85a0b", categoryId: 123434 } После этого бэкапирование прерывается. Подскажите, есть ли способ заставить pbm игнорировать дубликаты и продолжать восстановление коллекции?
Богдан
Всем привет! Подскажите, как правильно в базе хранить даты. К примеру, мне нужно ввести дату рождения, она может быть: 1. Точная - 03.05.1904 2. Не полная - хх.05.1904 / и хх.хх.1904... 3. Приблизительная - 03.05.1904 / хх.хх.1904 4. Период - 03.05.1904-03.05.1908 / хх.хх.1904 - хх.хх.1908 5. Текстовая - "родился летом до войны"
Nalik
Тут нету ответов, только вопросы
Богдан
Тут нету ответов, только вопросы
Ну а как обычно делают? Есть же какой-то классический метод?
Алексей
Всем привет! Подскажите, как правильно в базе хранить даты. К примеру, мне нужно ввести дату рождения, она может быть: 1. Точная - 03.05.1904 2. Не полная - хх.05.1904 / и хх.хх.1904... 3. Приблизительная - 03.05.1904 / хх.хх.1904 4. Период - 03.05.1904-03.05.1908 / хх.хх.1904 - хх.хх.1908 5. Текстовая - "родился летом до войны"
так это и завсит от того какие ты ожидаешь то? реально могут быть не точные? тогда можно точную дату сделать нуллабл полем и отдельно типа коммент, если дата нулл то в коменте написано чего там до войны или еще чего
Nalik
я хз, я даты храню в Unix
Богдан
Пока идея только записывать как текст и уже на стороне клиента определять, что за дата
Богдан
так это и завсит от того какие ты ожидаешь то? реально могут быть не точные? тогда можно точную дату сделать нуллабл полем и отдельно типа коммент, если дата нулл то в коменте написано чего там до войны или еще чего
А если дата не полная? То тоже в отдельное свойство как текст? Да, могут быть не полные, когда не знают. К примеру нужно ввести дату рождения прадеда
Богдан
А не бывает дат не полных..
Тогда записывать только как текст?
Vyacheslav
Тогда записывать только как текст?
У тебя же монга. сделай структуру
Богдан
Vyacheslav
Ну, у тебя кейсы какие: Точная, не полная (тоже самое что и приблизительная), период, текстовая
Vyacheslav
{ "type": 1, "exact": "2023-10-24T07:58:08Z" } { "type": 2, "notExact": { "day": "*", "month": "8", "year": "2012" } } { "type": 3, "periodFrom": "2023-10-24T07:58:08Z", "periodTo": "2028-10-24T07:58:08Z" } { "type": 4, "text": "родился летом до войны" }
Богдан
Благодарю!
Вячеслав
добрый день. а как в mongo поискать по маске а-ля like '%first_word%second_word%' ?
Nick
добрый день. а как в mongo поискать по маске а-ля like '%first_word%second_word%' ?
регуляркой https://www.mongodb.com/docs/manual/reference/operator/query/regex/#perform-a-like-match
Nick
PCRE2 ?
чет сразу не понял что имелось в виду, да
Вячеслав
ага, спасибо. вроде бы получилось вот так: {'field': {$regex: "first_word.*second_word", $options: 'i'}}
Nalik
а что по сути тут должно делаться? вижу зачемто лукап к той же таблице
Все верно. Это таблица с чатами. Должно подсчитывать количество участников в чате. 1. В таблице users хранится информация обо всех пользователях с полями: *user_id, user_login, user_email, user_pass, user_name, user_photo, user_activate*. 2. В таблице chats_list хранится информация обо всех созданных чатах с полями: *chat_id, chat_type, chat_name, chat_photo, create_user_id, create_time*. 3. В таблице chats_user хранится информация обо всех чатах в которых состоит пользователь с полями: *user_id, chat_id, join_time, leave_time, chat_read_time, read_msg_id, chat_sound*.
Nalik
а что по сути тут должно делаться? вижу зачемто лукап к той же таблице
Должно добавляться поле userCount с количеством участников в чате
Nalik
На самом деле суть вопроса в другом, как в целом сделать лукап или подсвет более быстрым)
Nalik
а зачем лукап?
А какие варианты?
Nalik
К сожалению предметно поговорить уже не смогу, код с примерами не под рукой
Nick
А какие варианты?
простой $group по ид чатов
Nalik
простой $group по ид чатов
group count? Делал, не подошло. Опять же предметно поговорить не смогу.
Nalik
Завтра буду у ПК, напишу. Не против?
Nick
group count? Делал, не подошло. Опять же предметно поговорить не смогу.
ну нет так нет, могу посоветовать пока разве что explain использовать для понимания где тратится время
Semyon
db.photos.find({naked:true}) вот так попробуй
Semyon
Спасибо 😄
Асель
Привет! подскажите, есть ли возможность дать пользователю привилегию выполнять шаг "out" в aggregation, не давая все rw права ? пробовала создать роль с createCollection и выдать ее пользователю, но все равно получила ошибку "not authorized to execute command aggregate out"
Nalik
А подскажите, как в архитектуре чата реализовать удаление сообщений только у себя? Это нужно вести отдельную таблицу с удаленными сообщениями? Но она ведь может стать очень громоздкой со временем
Nick
точнее коллекцию, раз мы говорим о монго :) все верно
коллекция для фильтрации, там правила. Перед отдачей юзеру пачки из сообщений проверяется есть ли они в фильтрах, если найдены то убираем из пачки
Nalik
Я имею ввиду как правильно реализовать архитектуру, как помечать в базе сообщения удаленное для одного пользователя. Условно говоря есть коллекция "messages" где хранятся все сообщения с идентификаторами назначения (допустим chat_id). Вот я Вася решил удалить у себя сообщение, в какой коллекции делать пометку об этом.
Алексей
а зачем в БД ее делать пусть твой клиент(мессенджер?) на гуи это сделает
Nalik
в коллекцию фактов удаления просто добавляется факт id сообщения+ид юзера+время
Ну получается как раз ты предлагаешь создавать отдельную коллекцию для факта удаления сообщения. Я об этом и спрашивал :)
Nalik
Грубо говоря будет отдельная коллекция с названием "messages_delete" куда мы будем заносить идентификаторы удаленных сообщений и идентификатор пользователя удалившего сообщения
Алексей
не перепутала) пробовала в консоли и в компасе
просто нагуглил тему что у некоторых это работало в консоли но не работала в джаве) по идее роли на создании коллекции в данной бд должно хватать... а попробуй просто под тем юзером создать коллекцию
Алексей
пробовала, так работает)
перезагрузи тогда все и попробуй еще раз
Nalik
да, аналогично удаление у всех это та же запись без проставленного ид юзера
Прикольно, а я бы отдельным полем помечал глобальное удаление сообщения. В том же документе сообщения
Алексей
то есть теперь юзеру ващего мессенджера надо не 1 запрос чтобы получить все свои сообщения а "джойн" двух коллекций?)
Nick
вообще тут также можно в исходном сообщении проставить флаг что у когото из юзеров оно удалено и по нему надо сделать доп проверку
Алексей
зачем джойн когда можно просто два запроса сделать?)
ну как -надо все ид получить первым запросом а потом по каждому уточнить во втором запросе)