Anatoly
Привет. Подскажите пожалуйста как сделать find на количество документов autorityLetter.
Anatoly
$size
Может я не правельно обьяснил, грубо говоря мне нужно получить , что у меня таких 2elements, как указано на фото. Спасибо...
Anatoly
Ок. Спасибо
spectrum
Ребята, привет. У меня есть в документе сообщения чата вот такое поле:
spectrum
spectrum
В reader записи вставляются сразу массивом (все id пользователей, кто участвует в чате). Можно ли как то сделать, чтобы status свое дефолтное значение вычеслял по формуле? Если id совпадает с id действующего юзера, тогда значение будет не 1, а 2
spectrum
пишите код и он вам будет вычислять перед вставкой статусы
А как корректно обратиться к вставляемое значение поля reader в текущей записи? Хотелось бы такую логику: status: { type: Number, default: reader == '63873b13424de2014d16493f' ? 2:1 }
Nick
А как корректно обратиться к вставляемое значение поля reader в текущей записи? Хотелось бы такую логику: status: { type: Number, default: reader == '63873b13424de2014d16493f' ? 2:1 }
а зачем вам это в модели? это уже логика и она должна быть выполнена перед тем как данные попадут в базу. Просто формируйте значение статуса в явном виде без всяких дефолтов
spectrum
а зачем вам это в модели? это уже логика и она должна быть выполнена перед тем как данные попадут в базу. Просто формируйте значение статуса в явном виде без всяких дефолтов
Не совсем понимаю, что вы предлагаете. Мне приходит массив пользователей чата в таком виде: ['63873b13424de2014d16493f', '63873b13424de2014d164943', '63873b13424de2014d16494f', '63873b14424de2014d16495d']. Дальше, когда я создаю документ сообщения, я просто указываю этот массив в модель и сохраняю. Все отлично, только затем приходится делать еще один запрос к базе и исправлять статус одного сабдокумента в документе сообщения с 1 на 2, т.к. очевидно что тот, кто отправил сообщение его уже прочитал. Способ работает, но мне бы хотелось чтобы при вставке у нужного пользователя сразу проставлялся верный статус. При этом не хотелось бы делать каких-либо сложных преобразований с массивом id пользователей, участвующих в чате. Поэтому искал способ динамического определения дефолтного значения.
Nick
Не совсем понимаю, что вы предлагаете. Мне приходит массив пользователей чата в таком виде: ['63873b13424de2014d16493f', '63873b13424de2014d164943', '63873b13424de2014d16494f', '63873b14424de2014d16495d']. Дальше, когда я создаю документ сообщения, я просто указываю этот массив в модель и сохраняю. Все отлично, только затем приходится делать еще один запрос к базе и исправлять статус одного сабдокумента в документе сообщения с 1 на 2, т.к. очевидно что тот, кто отправил сообщение его уже прочитал. Способ работает, но мне бы хотелось чтобы при вставке у нужного пользователя сразу проставлялся верный статус. При этом не хотелось бы делать каких-либо сложных преобразований с массивом id пользователей, участвующих в чате. Поэтому искал способ динамического определения дефолтного значения.
а что вам мешает сразу сформировать массив из пар {reader: "dsfdf", status: 1}
spectrum
а что вам мешает сразу сформировать массив из пар {reader: "dsfdf", status: 1}
Ничего не мешает. Я только изучаю MongoDB/Mongoose поэтому возможно задаю глупые вопросы. Хотелось использовать динамическое определение дефолтного значения, как вот в этом примере: https://stackoverflow.com/questions/53998995/mongoose-calling-function-for-default-value только с применением своей логики. Но если оптимальным будет предварительное преобразование массива пользователей перед вставкой, буду делать так. Спасибо за помощь 👍
Nick
Ничего не мешает. Я только изучаю MongoDB/Mongoose поэтому возможно задаю глупые вопросы. Хотелось использовать динамическое определение дефолтного значения, как вот в этом примере: https://stackoverflow.com/questions/53998995/mongoose-calling-function-for-default-value только с применением своей логики. Но если оптимальным будет предварительное преобразование массива пользователей перед вставкой, буду делать так. Спасибо за помощь 👍
Это имеет смысл если у вас есть поле а и б и вам надо например их произведение хранить, или есть дата а и б и надо бы прихранить сразу сколько дней между ними. Т.е. вычислимые значения из текущих полей. Но у вас есть еще какойто третий источник информации и это уже будет создавать проблемы, т.к. надо организовывать доп запросы и спец логику
spectrum
Это имеет смысл если у вас есть поле а и б и вам надо например их произведение хранить, или есть дата а и б и надо бы прихранить сразу сколько дней между ними. Т.е. вычислимые значения из текущих полей. Но у вас есть еще какойто третий источник информации и это уже будет создавать проблемы, т.к. надо организовывать доп запросы и спец логику
Но по идее у меня ситуация как в вашем примере. У меня есть поле а и мне его надо сравнить с некоторым значением б, которое известно. Т.е. как в вашем примере только вместо произведения надо сделать сравнение. Или я что-то не так понимаю?
Nick
Если оно будет рядом с reader сохраняться то норм, иначе не комильфо и костыли
spectrum
Если оно будет рядом с reader сохраняться то норм, иначе не комильфо и костыли
Смотрите, у меня есть переменная my_id, есть массив reader_user = [{ reader_id: '63873b13424de2014d16493f' }, { reader_id: '63873b14424de2014d16495d' }, { reader_id: '63873b13424de2014d16494f' }] Я хочу поле reader вставить массив reader_user, но так, чтобы дефолтное значение определилось динамически путем сравнения reader_id вставляемой записи с известным значением my_id. Если значения не равны, будет статус 1, если равны 2. Такую логику определения дефолтного значения можно реализовать в модели? Или лучше преобразовывать массив reader_user добавляя в объекты массива новое поле статуса и определяя его значения?
Nick
Если вопроса о простоте работы с кодом не стоит то можно и в модель фигачить и какимито хаками передавать туда то самое значение с которым надо сравнивать
spectrum
После пояснений, я понял в чем проблема. Спасибо!
K
Всем привет! Подскажите пожалуйста, в findOneAndUpdate можно в projection вернуть свойство ДО и ПОСЛЕ обновления?
Eva🇺🇦
Mongoose/ MongoDB Author.find(query).sort({ date: -1 }).limit(10000).populate(“articles”).cursor().forEach((article) => { //обращаемся в gcp за доп данными }) Привет! Вот эта кверя очень долгая, хз как тут еще можно оптимизировать.. Не подскажите? populate это аналог $lookup операции. В forEach еще хочется давать запросы пачками по 10 штук, но batch опция в cursor (cursor({batch: 10})) не работает..
Taras Kosyi (ง•̀o•́)ง
А allowDiskUse записует фул объект во время сортировки, или айдишки?
Eva🇺🇦
Индексы стоят?
Стоят индексы, да
Dars
А если уже заполнена бд данными, добавление индекса наполнит его данными? Добавил индекс, слишком быстро всё прошло
Aleksey
всем привет не пойму как победить куда копать
Dars
Индексы немного весят
У меня коллекция с полем тегов в массиве. Добавил индекс, слишком быстро он добавился. СУБД же должна была пройтись по всем массивам и составить свои внутренние вспомогательные данные для ускорения операций с этими массивами
Eva🇺🇦
Кажется, у них в доке сказано, что это юзлесс Индексы с $in
Eva🇺🇦
Индексы можно легко удалить, если что. Сначала в схеме, а потом в Монго компасе, например
Dars
Добавляли индекс на поле типа массив? Индексация массива никак не улучшит скорость поиска
Почему юзлесс. У них написано что индексация происходит по всем значениям массивов
Denis
всем привет не пойму как победить куда копать
1) Проверить /var/log/messages, /var/log/mongodb/mongod.log может в них более внятно и оно не может новый процесс создать и надо поднять лимиты 2) Проверить не остался ли сокет /tmp/mongodb-*.sock, удалить его 3) Запустить не через systemctl, а вручную, не из под рута, без fork, может там тогда подробнее на экран напишет
Aleksey
грусть
Denis
не фига (((
А покажи вывод при запуске руками
Aleksey
жалуеться на pid
Aleksey
да конечно ребутал((( уже весь гугл перечитал
Aleksey
открывал закрывал
Aleksey
прикольно ты плюсах запорочелся
Aleksey
респект
Alex
Ребят, как установить MongoDB на Fedora 37?
Aleksey
Ребят, как установить MongoDB на Fedora 37?
салют да репозиторий добавь а лучше в контенре ставь
Nick
SSL?
Это было про тулы и нейминги бинарей
C
Возможно ли модифицировать ответы от стандартных методов по-умолчанию? К примеру есть модель юзера, условно я хочу чтобы для каждого юзера к его name прибавлялся какой-то символ
C
вопрос только, сработаю ли они если квери выполняется в рамках популейта юзера, а не явного вызова .find
Aleksey
Привет парни а можно базу пернести в другую деректорию путем копировать вставить ?
C
тут хз
работает, пойду пол проекта перепишу что-ли ))
Nick
Привет парни а можно базу пернести в другую деректорию путем копировать вставить ?
можно, стопаете могу, копируете куда надо, в конфиге меняете путь до новог оместа, запускаете
C
если используете монгус то там есть мидлвари и иех можно вроде на поиск повесить
По итогу доступ то получить можно, а вот модифицировать или добавить новое поле - фиг
Nick
так вы поменяете в нем поле user.name = user.name+"123"
Nick
так вы поменяете в нем поле user.name = user.name+"123"
только учтите, что в следущий раз при save изменение будет записано в базу
Aleksey
самое чудно системктл пишит что база не работате
spectrum
Всем привет. Подскажите, какой наиболее правильный способ в mongoose предотвратить появления не уникальных ссылок на документе в другом документе, у которого есть массив с этими ссылками. Пример у меня есть документ чата, в нем есть массив с пользователями, которые подключены к чату. Если я добавляю нового пользователя, запрос не должен никого добавить в массив, если там уже есть ссылка на пользователя, которого я хочу добавить. Я думал на уровне схемы можно задать валидацию уникальных значений, но как оказалось параметр unique: true в схеме отвечает не за уникальность значений, а только за создание уникальных индексов (хотя я до конца и не понял, про что шла речь в документации). Подозреваю, что при такой потребности делают проверку уникальности самостоятельно. Остается вопрос как наиболее грамотно и правильно это делать, чтобы на операцию тратить минимально ресурсов.
tomyoll
Всем привет. Подскажите, какой наиболее правильный способ в mongoose предотвратить появления не уникальных ссылок на документе в другом документе, у которого есть массив с этими ссылками. Пример у меня есть документ чата, в нем есть массив с пользователями, которые подключены к чату. Если я добавляю нового пользователя, запрос не должен никого добавить в массив, если там уже есть ссылка на пользователя, которого я хочу добавить. Я думал на уровне схемы можно задать валидацию уникальных значений, но как оказалось параметр unique: true в схеме отвечает не за уникальность значений, а только за создание уникальных индексов (хотя я до конца и не понял, про что шла речь в документации). Подозреваю, что при такой потребности делают проверку уникальности самостоятельно. Остается вопрос как наиболее грамотно и правильно это делать, чтобы на операцию тратить минимально ресурсов.
Ты имеешь ввиду, как предотвратить дубликаты значений в массиве? Если да, то просто используй $addToSet вместо $push
spectrum
Ты имеешь ввиду, как предотвратить дубликаты значений в массиве? Если да, то просто используй $addToSet вместо $push
Да я именно это и интересовало. И хорошо что спросил, так как только осваиваю и сейчас бы нагородил с три короба... Спасибо! 👍
tomyoll
Есть вопрос один. У меня есть массив объектов, например [{ _id: 'xxx', userId: 'xxx', type: 'xxx'}]. Мне необходимо в пайплайне промапить этот массив и получить только значения поля userId. В таком виде [{_id: 'xxx', userId: 'xxx', type: 'xxx'}] => ['xxx', 'xxx', 'xxx', 'xxx']. Каким способо это можно сделать?
Daler
Здравствуйте, нужен аналог SELECT FOR UPDATE в монго, не подскажите как это сделать? findAndUpdate внутри тарнзакции мне не подходит, мне нужно именно локать запись чтобы другие не могли читать пока я не закончу свои дела внутри транзакции
Daler
Есть коллекция с продуктами и при мультипоточном обращении количество продукта у всех получается 5, а мне нужно чтобы каждый получил данные о продукте после завершения друг друга
Daler
Мне нужно как то за-lock-ать этот товар. В MySQL для этого просто нужно сделать SELECT FOR UPDATE и всё строка с продуктом локается, до завершения транзакции
Daler
в find всё равно же попадётся старая запись
Nick
но вы не сможете ее изменить