Алексей
я бы тоже попробовал составной индекс спорт: 1, стартТайм: -1
Ростислав ✚
Ростислав ✚
yopp
Всем привет, сортировка сильно увеличивает время ответа от монго, как это можно оптимизировать? Без нее 1,5с а с ней 15-20
Скрин1 - pipeline
Скрин2 - пример документа
Вам нужен составной индекс в котором префиксом являются поля по которым вы фильтруете документы а суффиксом является поле по которому идёт сортировка отфильтрованных документов
Если составного индекса нет то сортировка будет в памяти. А это сначала надо прочитать с диска/из кеша в буфер все попавшие под условия документы, а потом уже в этом буфере их все сортировать. Это очень медленно.
У вас фильтр состоит из sport, leagueGroup и isFinished, а сортировка по startTime: -1
Тогда ваш запрос покроет вот такой индекс:
{sport: 1/-1, leagueGroup: -1/1, isFinished: 1/-1, startTime: -1}
Порядок сортировки ключей в индексе для первых трёх полей может быть любым, если вы по этим полям дополнительно не планируете сортировать, а вот поле startTime должно иметь тот-же порядок что и в $sort.
В целом планировщик запросов почти никогда не использует пересечение нескольких индексов для фильтрации и если правильно помню, вообще никогда не использует пересечение для сортировки. Поэтому создавать много одиночных индексов по разным полям не имеет смысла, если вы не фильтруете с условием где есть только одно условие по конкретному полю.
Andrey
Вечер добрый.
поставил mondodb 7.0, и пытаюсь выключить доступ с локалхоста без пароля. Пользователя создал, в конфиге написал:
security:
  authorization: "enabled"
setParameter:
   enableLocalhostAuthBypass: false
а mongosh ходит и ничего не спрашивает
если явно задать логин-пароль "mongosh --port 27017 -u admin -p '12345' --authenticationDatabase 'admin" тоже пускает
Ростислав ✚
Вам нужен составной индекс в котором префиксом являются поля по которым вы фильтруете документы а суффиксом является поле по которому идёт сортировка отфильтрованных документов
Если составного индекса нет то сортировка будет в памяти. А это сначала надо прочитать с диска/из кеша в буфер все попавшие под условия документы, а потом уже в этом буфере их все сортировать. Это очень медленно.
У вас фильтр состоит из sport, leagueGroup и isFinished, а сортировка по startTime: -1
Тогда ваш запрос покроет вот такой индекс:
{sport: 1/-1, leagueGroup: -1/1, isFinished: 1/-1, startTime: -1}
Порядок сортировки ключей в индексе для первых трёх полей может быть любым, если вы по этим полям дополнительно не планируете сортировать, а вот поле startTime должно иметь тот-же порядок что и в $sort.
В целом планировщик запросов почти никогда не использует пересечение нескольких индексов для фильтрации и если правильно помню, вообще никогда не использует пересечение для сортировки. Поэтому создавать много одиночных индексов по разным полям не имеет смысла, если вы не фильтруете с условием где есть только одно условие по конкретному полю.
Я так и сделал, составил спорт и старттайм и теперь все отлично, спасибо
Hunter
Я зробив дамп БД, можна його локально стартанути задоплмогою docker і якщо да, то ще силочку як це зробити?)
Алексей
Алексей
Localhost Exception
You can create users either before or after enabling access control. If you enable access control before creating any user, MongoDB provides a localhost exception which allows you to create a user administrator in the admin database. Once created, you must authenticate as the user administrator to create additional users.
Алексей
To disable the localhost exception, set the enableLocalhostAuthBypass parameter to 0.
Andrey
всем привет,почему у меня переменную не получается сделать ObjectId?,Прикол в том что если передать значение из переменной напрямую,то есть саму строку, то все ок
Andrey
Артемий
Доброго дня
Подскажите пожалуйста
Использую составной индекс, к примеру из 5 полей, но при выборке, какие-то поля могут отсутствовать (1-е всегда будет, остальные 4 по ситуации, порядок полей в запросе известен)
Прочитал много инфы, но так к верному решению и не пришел...
При выборке главное наличие 1-го поля, что бы индекс использовался (он у меня как раз всегда есть), а дальше, если отсутствует к примеру 3-е поле, то индекс так же будет использоваться? Просто выборка будет последовательно по 1, 2, 4 и 5 полю, без 3-го, либо только по 1 и 2, а поскольку 3-го нет, то и до 4-5 не дойдет?
Артемий
Или же требуется написать все возможные вариации индексов
поле1,поле2, поле3, поле4, поле5
поле1, поле3, поле4, поле5
поле1,поле2, поле4, поле5
поле1,поле2, поле3, поле5
поле1,поле2, поле3, поле5
и т.д, со всеми вариациями
либо же вот этого будет достаточно
поле1(имеется всегда),поле2, поле3, поле4, поле5
Алексей
Доброго дня
Подскажите пожалуйста
Использую составной индекс, к примеру из 5 полей, но при выборке, какие-то поля могут отсутствовать (1-е всегда будет, остальные 4 по ситуации, порядок полей в запросе известен)
Прочитал много инфы, но так к верному решению и не пришел...
При выборке главное наличие 1-го поля, что бы индекс использовался (он у меня как раз всегда есть), а дальше, если отсутствует к примеру 3-е поле, то индекс так же будет использоваться? Просто выборка будет последовательно по 1, 2, 4 и 5 полю, без 3-го, либо только по 1 и 2, а поскольку 3-го нет, то и до 4-5 не дойдет?
составной поможет только при порядке тех полей что в нем, то есть для индекса a:1 b:1 c:1 d:1 будет ускорен только поиск:
- a
- a, b
- a, b, c
- a , b, c, d
порядок важен, запрос типа find({b: 1, a:2}) не будет ускорен
Алексей
вариации индексов?)) память то не резиновая и дело не только в ней, на 1 вставку будут персчитываться ВСЕ индексы что замедлит твою коллекцию с пачкой индексов
Артемий
составной поможет только при порядке тех полей что в нем, то есть для индекса a:1 b:1 c:1 d:1 будет ускорен только поиск:
- a
- a, b
- a, b, c
- a , b, c, d
порядок важен, запрос типа find({b: 1, a:2}) не будет ускорен
т.е. если индекс a:1 b:1 c:1 d:1
а запрос у меня find({a: 1, c:2, d:1}) (без b), индекс не будет нормально отрабатывать и для такого запроса потребуется индекс типа a:1 c:1 d:1
Алексей
Алексей
надо именно собрать всю стату какие реально запросы могут быть, какие важны, какие пусть себя тянутся, что надо точно ускорить и на основании этого индексы продумать. Может половина твоих вариантов по факту раз в год случается?
Артемий
Алексей
да, сначала проанализируй, потом когда ты знаешь что вот львиная доля это такие запросы -смотри. Индекс на первое поле точно не помешает раз оно везде
Артемий
благодарсвтую
Nick
составной поможет только при порядке тех полей что в нем, то есть для индекса a:1 b:1 c:1 d:1 будет ускорен только поиск:
- a
- a, b
- a, b, c
- a , b, c, d
порядок важен, запрос типа find({b: 1, a:2}) не будет ускорен
порядок появления ключей в запросе не имеет значения, даже хз откуда эта информация у вас. А вот порядок ключей сортировки как раз влияет на факт участия индекса
Артемий
Viktar
Артемий
а как насчет такой идеи - не создавать кучу индексов, а создавать индекс непосредственно перед выполнением запрос, т.к. я знаю какие поля потребуются, и соотв. после выполнения запроса удалять индекс... или похоже на маразм больше?)
Артемий
Mr.
Здравствуйте
Прошу вашей помощи.
Установил mongoDB 7.0 через brew, MacOS Ventura. Делал все по инструкции на сайте морги
Возникает ошибка при запуске Mongosh
Как это можно решить?
Mr.
Алексей
ты ее не удалял, не переставлял? посмотри лог, возможно там неверный путь к бд написан
Алексей
у меня так было после неудачной переустановки
Алексей
значит удалил не все) надо сносить подчистую с папками и настройками и потом заново ставить
Mr.
Удалял как сказано тут
Mr.
https://www.mongodb.com/basics/uninstall-mongodb
Алексей
да, я также но еще глазками по брю прошел каталогам и снес все что с монго было типа логов, репликасетов и прочего
Алексей
тогда заработало
Алексей
но в логи то глянь чего там
Artem
привет. подскажите пж, что не так в агрегации делаю ?
на первом шаге ошибка (на скрине), документы есть в коллекции. дата хранится в строке в ИСО формате, но не находит их
Artem
в базе лежит реквизит в формате строки
Nick
Исмаил
Всем привет, такая ситуация,впервые задеплоил проект на нест в связке с монго, сервер не работаетв логах показівает єто -
*ERROR [MongooseModule] Unable to connect to the database.*
Обычно получал такую ошибку когда нужно было добавлять ip на сайте монгодб. Как решить эту проблему ?
Nick
Artem
Исмаил
просто локально при запуске он работает, после деплоя не работает, как то может нужно на heroku добавлять ip адрес?
Nick
Nick
string
странно, проверил только что если и там и там строки, то все корректно работает. Проверяйте типы
Nick
Artem
если честно не подскажу конкретно, помню только что была однажды давно проблема из-за типа даты, а точнее ее несовместимости где-то, и пришлось писать конвертацию из Даты в ИСОстроку, после чего один опытный ЖСер, сказал, что хранить в ИСОСтроке - правильнее, и даже аргументы вроде были, но я не вспомню) просто взял на заметку с того времени
Artem
а за ответ спасибо ! надеюсь и правда в этом дело)
Nick
Исмаил
Maxmudjon
Нужно помощь
есть два компания, в каждом хранится profile сотрудника,
fooCompanyDBConnection
collection.staffers
barCompanyDBConnection
collection.staffers
но бд`user` хранится отдельно в другом месте
UserDB
collection.users
как написать схема в монгусе чтобы было универсально в будущем чтобы не писат fooCompanyDBConnection или barCompanyDBConnection?
Maxmudjon
мне очень хочется отдельно БД хранит каждый компания но логин пароль сотрудника хранит в едином месте в отдельный БД
The dark fight
Net
Лиза
Замок стоял забытым временем
привет всем, как исправить эту ошибку ?
Алексей
не тратить всю память
π∆$#∆
Привет, подскажите пожалуйста, делаю задание, никак не проходят тесты. Все, что пробовал, не работает. Думаю db.Wines.find( { id: { $regex: '23$'} } ).pretty() должно работать, но нет.
Upd: исправил ссылку
Nick
Андрей
Ящик водки
Doни
qq all Чеза ошибка я бы хотел коннектид монгодб
of Astora 𒉭
qq all Чеза ошибка я бы хотел коннектид монгодб
    mongoose.connect(process.env.MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true})
    .then(() => console.log('MongoDB connected!'))
    .catch((error) => console.log(error))
попробуй так
Doни