Igor
так при $eq идет полное совпадение, т.е. время полночь для сравнения просто даты
А как при таком формате отбирать доки за 1 день? Только с больше - меньше?
Nick
А как при таком формате отбирать доки за 1 день? Только с больше - меньше?
да, либо рядом хранить поле с днем, либо агрегации использовать и вытаскивать дату. Но сравнение диапазоном и удобное и расширяемо на любой диапазон и индексы использует
Александр
Добрый день. Подскажите пожалуйста, в чем мб причина, что индексы перестали работать при обновлении монги на 6 версию?
Nick
Такс вот сортировка по очкам интересно Это надо надо самому реализовать?
https://www.mongodb.com/docs/manual/reference/operator/aggregation/sort/#text-score-metadata-sort
Nick
Запросы по времени прежние
тогда похоже на то что формат выдачи инфомрации по индексам или ее учета изменился
Игорь Григорьевич
Коллеги, возможно, задача покажется, кому-то глупой или из категории RTFM, но это реальная задача. Итак, имеется некторое количество объектов с неизвестными заранее характеристиками. Необходимо организовать поиск объектов, наиболее близко удовлетворяющих заявленным пользователем хорактеристикам. Как это организовать в mongodb? В SQL можно было бы динамически генерировать текст запроса и тем самым ршить проблему невестных наперед характеристик. А как быть в данном случае?
Игорь Григорьевич
парсер ввода нормализация контекстное наполнение запроса через $or и $and
так чтобы через $or и $and нужно, чтобы характеристики были известны заранее, а этого нет
Alexandrr
так чтобы через $or и $and нужно, чтобы характеристики были известны заранее, а этого нет
вы пишете, что "организовать поиск заявленным пользователем характеристикам". что значит они не известны?
Игорь Григорьевич
вы пишете, что "организовать поиск заявленным пользователем характеристикам". что значит они не известны?
на этапе разработки не известны. пользователь их сам вносит на этапе эксплуатации
Alexandrr
на этапе разработки не известны. пользователь их сам вносит на этапе эксплуатации
а какая разница? решение все равно подходит. просто нужно будет хранить вводы пользователя, потом динамически расширять contextvars при исполнении, отдавать ошибку при отсутствии ну или как-то по-другому обрабатывать пример реализации: https://habr.com/ru/company/yandex/blog/526322/
SHZ
Ребят, всем привет. Прошу совета опытных юзеров. Ситуация такая, для практики и изучения Монго рентавал VРS сервачек, развернул на нем Ubuntu 20.4 установил комьюнити версию Монго 4.4.2 Через шелл настроил пользователей, в конфиге включил ваторизацию и биндинг внешнего айпи адреса, также в фаервол добавил доступ к порту Монго. При попытке потключисься к нему с локальной машины через тот же Компас без указания SSH\Proxy с юзером системы соединение не идет. Собственно вопрос, можно ли как то подключиться без поднятия SSH тунеля на хост машину?
SHZ
Да можно. Какую строку подключения указываете и что за ошибка?
Ошибка: connect ETIMEDOUT 104.254.247.201:27017 Cткока: mongodb://cvboard:password@1**.***.***.201:27017/?authMechanism=DEFAULT&authSource=cvboard
SHZ
А тачка 104.254.247.201 с локали вообще пингуется?
Блин... понял, буду рыть в эту сторону. Спасибо.
Егор
Ребят, подскажите как лучше сделать, использую 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, чтобы было нагляднее
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.. элементов) в одном флаконе? Без триггеров/функций. В Монго новичок
Andrey
это в корне не верно
Andrej
$addtoset прям недавно использовал, и так же есть $push & $pull на сколько помню из доки
Не подходит, мне нужно и удалять, а это добавление в "множество"
Alexander
Не подходит, мне нужно и удалять, а это добавление в "множество"
если устроит просто замена, то можно через $set укзаывая какой элемент массива вы изменяете, но вам скорее всего нужно чтобы добавили в конец, а удалили из начала?
Andrej
если устроит просто замена, то можно через $set укзаывая какой элемент массива вы изменяете, но вам скорее всего нужно чтобы добавили в конец, а удалили из начала?
Да, да, почти так, список - Первый вошел-последний вышел, где начало, где конец разницы нет. Если из питона я делаю update $set (размер списка 2КБ) всего списка, то времени уходит 0.7 попугаев, если две команды подряд, update $push (размер элемента 0.2 КБ) и update $pop, то 1.2 попугая, сам найти не смог можно ли оптимальнее это делать без каких-либо ухищрений
Alexander
тогда просто, удаляем из конца, добавляем в начало и более быстрого способа не будет по индексу
я предполгааю, что один $set, которые меняет элемент массива и индекс в цикличном буффере, будет быстрее чем добавить и удалить элемент. к тому же будет одна оперция а не две.
Alexandrr
я предполгааю, что один $set, которые меняет элемент массива и индекс в цикличном буффере, будет быстрее чем добавить и удалить элемент. к тому же будет одна оперция а не две.
операции в любом случае 2, так как модифицируется 2 объекта. читай внимательно условие его задачи: "Первый вошел-последний вышел, где начало, где конец разницы нет" вот если бы у него было условие: "1 определённый удалён, вместо него добавлен другой на то же место", тогда да
Andrej
Интересное требование про 2кб, что за задача что упирается именно в размер а не количество элементов списка?
У API ChatpGPT ограничение по объему присылаемой ему беседы 4096 токенов, это примерно 2 КБ текста на русском (скорее меньше). Это его память по контексту беседы. Мне нужно хранить текущий контекст, лишнее удалять. Юзер отправил в контекст сообщение, после расчета токенов, из диалога юзер+чат удаляется то, что не влезло в 4096 токенов, из начала беседы.
Andrej
Про это даже не подумал)
Большие сообщения от него или юзера можно им же сжимать, но я этого конечно же делать не буду)
Anonymous
Подскажите, а как лучше спроектировать БД в MongoDB где связь один-ко-многим? Допустим есть такие сущности: 1. Article 2. Tag 3. article_tag Соответственно тут у Article много Tag, и связь эта указывается через таблицу article_tag (article_id, tag_id) Нормально ли связи по такому принципу строить?