Igor
Igor
Air
ну тестовый индекс будет за сотые секунды отдавать результат, если строки не слишком длинные, не длиннее 1к символов, потом производительность резко падает, мне так тесты показали.
дело в том, что все, в том числе эластики всякие и полнотекстовый поиск монги используют под капотом жабий lucene.
так что не особо важно, где тестировать полнотекстовый поиск, результаты скорости будут одинаковые, только эластик сильнее интегрирован с люсей
Если я в переменную кладу 2 слова через пробел для поиска, то он находит документы и с 1 словом
Можно сделать чтобы искал только те документы где содержатся оба+ слова?
const product = await collection.find({$text:{$search:name}}).toArray();
Alexandrr
Air
Александр
Добрый день. Подскажите пожалуйста, в чем мб причина, что индексы перестали работать при обновлении монги на 6 версию?
Nick
Александр
Александр
Kenya-West
Игорь Григорьевич
Коллеги, возможно, задача покажется, кому-то глупой или из категории RTFM, но это реальная задача.
Итак, имеется некторое количество объектов с неизвестными заранее характеристиками. Необходимо организовать поиск объектов, наиболее близко удовлетворяющих заявленным пользователем хорактеристикам.
Как это организовать в mongodb?
В SQL можно было бы динамически генерировать текст запроса и тем самым ршить проблему невестных наперед характеристик. А как быть в данном случае?
Alexandrr
Игорь Григорьевич
Игорь Григорьевич
SHZ
Ребят, всем привет. Прошу совета опытных юзеров.
Ситуация такая, для практики и изучения Монго рентавал VРS сервачек, развернул на нем Ubuntu 20.4 установил комьюнити версию Монго 4.4.2
Через шелл настроил пользователей, в конфиге включил ваторизацию и биндинг внешнего айпи адреса, также в фаервол добавил доступ к порту Монго.
При попытке потключисься к нему с локальной машины через тот же Компас без указания SSH\Proxy с юзером системы соединение не идет.
Собственно вопрос, можно ли как то подключиться без поднятия SSH тунеля на хост машину?
Alexander
dima shumov
SHZ
Егор
Ребят, подскажите как лучше сделать, использую mongodb.
Есть коллекция bot_users, в ней должны быть два поля npsList и alarmList.
Вопрос, как лучше сделать, вынести npsList и alarmList в отдельную коллекцию или оставить таким образом:
type bot_users =
{
_id: ObjectId
telegramId: number
botName: string
username: string
firstName: string
lastName: string
isAdmin: boolean
date: string
alarmList: [{
name_doctor: string
name_template: string
data: string
status: boolean
}]
npsList: [{
_id: ObjectId
value: number
date: string
}]
}
p.s. Написал на ts, чтобы было нагляднее
Yaroslav
Nick
Alexander
Alexander
Мне кажется, если эти данные нужны будут по отдельности, то можно выносить в отдельную коллекцию, если нет или в основном нет, то лучше в одной коллекции все хранить. Разделение на коллекции только тогда, когда четко понимаете, что нужно работать с ними по отдельности.
Nick
Нет проблем удалять или изменять в массиве.
Ну смотря как удалять и как менять, а то тут у народа разные случаи были, что и запрос не составишь и только через редактирование через вытаскивание в код вменяемо работает
Ivan
а в чем проблема?
Alexander
конечно )
yopp
Судя по состоянию сервиса, у монги какие-то проблемы с запуском. Её убивает ОС сигналом illegal instruction. Возможно не совпадает архитектура пакета с архитектурой виртуальной машины?
yopp
А выполните пожалуйста file /usr/bin/mongod
yopp
И uname -a
yopp
Ого, в стандартной поставке нет file. apt install file наверное
yopp
Странно. Попробуйте удалить пакеты с монгой, проверьте что у вас репозиторий монги совпадает с вашим дистрибутивом (дистрибутив это по-моему слово в конце строки с настройкам репо) и поставить пакеты еще раз
Alexander
Это ошибка из-за несоответствия архитектуры. Где вы запускаете? Опишите подробнее инфраструктуру? И посмотрите нет ли 2-ой монги?
Alexander
Где запускаете-то
Alexander
В облаке? На виртуалке?
Alexander
Попробуйте запустить так: /usr/bin/mongod
Alexander
Вот эту команду выполните: grep avx /proc/cpuinfot
Alexander
да
Alexander
ну либо сделайте cat /proc/cpuinfo и глазами найдите есть ли строчка с avx
Alexander
ой
Alexander
grep avx /proc/cpuinfo
Alexander
лишняя букава
Alexander
все ясно
Alexander
у вас не поддерживаются инструкция avx, которые требуются для новой многи
Alexander
ставтьте 4.4
Alexander
Alexander
а что за VPS у вас?
Alexandrr
хостинг подскажи
Alexandrr
картошку копать хочу пойти
Yaroslav
Отличий много, https://www.mongodb.com/docs/manual/release-notes/6.0/#std-label-release-notes-6.0
Alexander
Много раз устанавливал и с проблемами сталкивался преимущественно когда надо было установить на какое-нибудь особенное железо. То, что у вашего провайдера не поддерживается avx - это уже звоночек. Возьмите Яндекс Облако и все будет в порядке. Правда не 100 руб…
Andrey
А почему бы просто не взять докер и образ монги какой хочешь. И на какой хочешь os
Andrey
2 момента, вам сказали, если вам представили сервер без необходимых инструкций в cpu, то mongo 4.4, 2 момент - любая os - ставите docker, и по инструкции с docker hub со страницы mongo - все просто и легко, прям по инструкции.
Andrey
А что добавить надо и зачем, данные храните через монтирование, так и настройки, или через переменные или через монтирование.
Andrey
докер самый универсальный способом. Зачем вам питон в контейнере.
Alexander
вам не нужно ставить ничего в контейнер моного, наоборот, вам нужно будет собрать собственный контейнер, где у вас будет и питон код вашего бота
Andrej
Вопрос про работу со списками. В одном поле лежит список словарей, размер которого нужно контролировать (он не должен быть более ~2КБ в качестве json) , это делает приложение. Сейчас я просто делаю update_one этого поля и присваиваю новый список. Интересует, есть ли более оптимальный вариант в плане скорости? Условного говоря push( 1 раз) и pop(1.. элементов) в одном флаконе? Без триггеров/функций. В Монго новичок
Alexandrr
Andrej
Andrey
это в корне не верно
Andrej
Andrej
если устроит просто замена, то можно через $set укзаывая какой элемент массива вы изменяете, но вам скорее всего нужно чтобы добавили в конец, а удалили из начала?
Да, да, почти так, список - Первый вошел-последний вышел, где начало, где конец разницы нет. Если из питона я делаю update $set (размер списка 2КБ) всего списка, то времени уходит 0.7 попугаев, если две команды подряд, update $push (размер элемента 0.2 КБ) и update $pop, то 1.2 попугая, сам найти не смог можно ли оптимальнее это делать без каких-либо ухищрений
Alexander
Да, да, почти так, список - Первый вошел-последний вышел, где начало, где конец разницы нет. Если из питона я делаю update $set (размер списка 2КБ) всего списка, то времени уходит 0.7 попугаев, если две команды подряд, update $push (размер элемента 0.2 КБ) и update $pop, то 1.2 попугая, сам найти не смог можно ли оптимальнее это делать без каких-либо ухищрений
я ни разу не слышал про кольцевые списки в mongo, из практики - самый эффективный вариант - это менять значение в списке и хранить индекс (но с точки программирования это гиморно, конечно)
Alexandrr
Да, да, почти так, список - Первый вошел-последний вышел, где начало, где конец разницы нет. Если из питона я делаю update $set (размер списка 2КБ) всего списка, то времени уходит 0.7 попугаев, если две команды подряд, update $push (размер элемента 0.2 КБ) и update $pop, то 1.2 попугая, сам найти не смог можно ли оптимальнее это делать без каких-либо ухищрений
тогда просто, удаляем из конца, добавляем в начало и более быстрого способа не будет
по индексу
Alexander
Nick
Nick
Andrej
Про это даже не подумал)
Большие сообщения от него или юзера можно им же сжимать, но я этого конечно же делать не буду)
Anonymous
Подскажите, а как лучше спроектировать БД в MongoDB где связь один-ко-многим?
Допустим есть такие сущности:
1. Article
2. Tag
3. article_tag
Соответственно тут у Article много Tag, и связь эта указывается через таблицу article_tag (article_id, tag_id)
Нормально ли связи по такому принципу строить?
Alexandrr