Veaceslav
Фронт отдает запрос mongoose а там уже он работает с БД
Nick
в этом сулчае вам не треубется в базе чтото делать
Nick
в схеме определяете дефолтное занчение и раотаете дальше
Gleb
Привет, подскажите, как объеденить значения при Answer.findOneAndUpdate({ _id: ObjectId(answerId) }, { tags: data.tag }, { new: true }).exec() Если в кратце, нужно сделать tags: [...prevTags, data.tag]
подскажите, пожалуйста, еще, могу ли я на 4 строке обратиться к данному ответу без переменной дополнительной?
Gleb
работать с этим свойством у объекта этой коллекции
Veaceslav
в схеме определяете дефолтное занчение и раотаете дальше
То есть если я добавлю новое поле, то это поле будет и у тех обьектов которые уже в БД ?
Veaceslav
да
Такая же история и при удаление поля из БД ?
Nick
если конечно в монгусе за год ничего в этом плане не изменилось, но достаочно прочитать доку
Gleb
зачем вам к нему обращаться7 какую задачу решить пытаетесь?
по названию переменной - tag, нужно добавлять/удалять/редактировать определенный тэг у этого объекта коллекции
Gleb
в зависимости от роута и от данных с фронта. в данном примере нужно объеденить массив с новым элементом (создание). То есть, классический [...oldTags, newTag] в JS
Nick
Такая же история и при удаление поля из БД ?
про удаление к сожалению ничего не скажу
Veaceslav
если конечно в монгусе за год ничего в этом плане не изменилось, но достаочно прочитать доку
Спасибо, сейчас попробую еще раз все сделать. Может реально я чет не так понял из доках.
Nick
вообще пройдитесь по всем операторам в разделе https://docs.mongodb.com/manual/reference/operator/update-array/
Gleb
А если на один роут приходит айдишник, и мне нужно либо добавить в массив, либо убрать (toggle) - это лучше средствами монги делать или через ноду делать просто 2 различных запроса в БД?
Gleb
$addToSet добавит только, если такой тег уже есть, но не удалит) Но мне тогда и убрать нужно)
Sergei
а есть аналог mlab но за бесплатно? а то они посчитали что я use for “production use” хотя я как раз использую при разработке
Nick
А если на один роут приходит айдишник, и мне нужно либо добавить в массив, либо убрать (toggle) - это лучше средствами монги делать или через ноду делать просто 2 различных запроса в БД?
на вскидку не придумал как это просто реализовать, update в монге не может использовать значения текущих полей для вычисления новых, поэтому в два запроса в одной транзакции самое простое в плане придумывания
Veaceslav
Мужики подскажите плиз момент такой. Я использую микросервисы (думаю это важно) и при попытке сделать $push я почему-то получаю два значение (дубликаты в базе), я думал проблема в микросервисах, но нет, запрос приходит один раз ...
Veaceslav
Вот лог докера. "test" это вывод в console.log когда идет запрос на мутацию ... Он один, значит и попыток было ровно 1. В вот значение в array стало на 2 больше, хотя должно быть +1
Veaceslav
Вот что в базе ... даже микротиме один и тот же ...
Bandikoot
Вот лог докера. "test" это вывод в console.log когда идет запрос на мутацию ... Он один, значит и попыток было ровно 1. В вот значение в array стало на 2 больше, хотя должно быть +1
а как запросы роутятся для микросервисов? не может быть ситуации, что два контейнера один запрос исполнили каждый по разу?
Nick
Вот что в базе ... даже микротиме один и тот же ...
читайте внимательно доки push просто добавляет занчение в массив без каких либо гарантий уникальности
Nick
$addToSet
Veaceslav
У меня такая же проблема и с inc
Nick
не понял про inc
Gor
это проблема схемы mongoose а не монги
Gor
выполняется экстра запрос им из-за того как схема описана. гуглить дальше именнов этом направлении
Gor
хотя может быть все же вариант многократного выхова обработчика(микросервиса)
Nick
банально отсутвует контроль содержимого и операции не идемпотентны, поэтому и такая херь. Если хотите балансить нагрузку, то организовывайте соответствующую обработку
Gor
банально отсутвует контроль содержимого и операции не идемпотентны, поэтому и такая херь. Если хотите балансить нагрузку, то организовывайте соответствующую обработку
монгууза она как бы абстрактный слой над монгой. с реализацией схемы и ее валидации и кучи еще плюшек. с возможностью не верного юзания
Gor
я лично предпочитаю native driver
Nick
поэтому и говорю организовывайте проверки
Gor
да большая часть народа тестами даже не озабочивается, не говоря уже о валидации выполнения запросов)
Veaceslav
хотя может быть все же вариант многократного выхова обработчика(микросервиса)
А почему тогда console.log выводится один раз ? Он в этом же mutation
Veaceslav
попробуй с mongoose.set('debug', true)
Хммм, два раза выводит. Так и должно быть ?
Gor
ну только если ты отдельно еще сам не выводишь
Gor
и видишь что там $set?
Veaceslav
Хотя он вообще все запросы делает два раза ...
Gor
а у тебя $push в views да
Veaceslav
да
Gor
до дебаг - у тебя этого не выводило, значит таки реально 2 запроса в базу идет
Veaceslav
Я просто не могу понять почему консоль показывает один раз test а база работает два раза ...
Veaceslav
Вот это мне не понятно
Veaceslav
Мужики помогите плиз понять что за фигня может быть
Gor
это в коде явно
Veaceslav
Короче я достал этот серсив на порт оттдельный... И присылаю чисто на него запросы, сейчас нету ничего до или после него, но такая же фигня ...
Veaceslav
Вот сам сервер
Gor
на тестовом повторить можешь ?
Veaceslav
Я думаю что да... А есть писичница для этого ?
Veaceslav
Я могу zip кинуть всего этого
Veaceslav
тут мелкий сервис
Veaceslav
Может запустите у себя или как правильнее и удобнее ?
Gor
Не, это точно делать не буду. Код на гитхаб?
Veaceslav
Сейчас будет )
Veaceslav
Veaceslav
Не, это точно делать не буду. Код на гитхаб?
Может подскажите что и как ...
Gor
Может подскажите что и как ...
а проблема только с product или другие сервисы тоже дубли получают?
Veaceslav
такая же история у category
Veaceslav
Там есть inc и он тоже два раза идет ...
Gor
дай угадаю при inc в саму категорию?
Gor
не в свойство а имено самой категории?
Veaceslav
views
Veaceslav
return CategoryModel.findByIdAndUpdate(id, {$inc: {views: 1}}, {new: true} )
Gor
ага
Veaceslav
ага
Это не правильно или как ?
Gor
нет еще ответа
Veaceslav
нет еще ответа
Надеюсь хоть кто-то тут сможет помочь решить это баг, первый раз такое вижу
Gor
вот вопрос