Nan0
Какую задачу пытаетесь решить?
(тут дальше больше про коллекцию чем бд) урезанная коллекция полностью перезаписывает все документы новыми, как только на сайте обновится информация товаров. нужно проверить была ли перезапись произведена за счёт выставления новых товаров или документы остались те же, что и при первой записи.
Nan0
Какую задачу пытаетесь решить?
может добавить отдельным полем флаг на все документы и в случае его изменения по всей коллекции, считать, что произошла перезапись?
Nick
Добавьте просто поле с датой обновления
Nick
Хотя это не позволит определить факт изменения аттрибутов
Nan0
Добавьте просто поле с датой обновления
дата может же менятся, тогда по какому принципу мне сравнивать, что она изменилась?
Nick
А зачем оно вам? Чтото пересчитываете?
Nan0
А зачем оно вам? Чтото пересчитываете?
да, проверяю, что товары перезаписались полностью на новые
Nick
А какой в этом смысл?
Nick
Моэете просто удалять коллекцию и создавать заново и ее заполнять
Nick
Если нужно отслеживать что изменилось, то флаги или полес версией датой
Anonymous
добрый день, бесплатные листочки, которые на 512 часто выходят из строя?
Ярослав
User.prototype.set = function(field, value) { this[field] = value; return this.save(); } await user.set("balance", count); Так работает, а когда я пытаюсь сделать запрос на подобии await user.set("block.tir", false); То так уже не работает, в чем проблема?
Anonymous
mongodb (лого листочек)
Anonymous
а листочки, это инстансы, которые атлас дает)
yopp
«Бесплатные листочки на 512» это бесплатный тариф на атласе?
yopp
А, ну вы и шарады загадываете
yopp
Нет, вообще не выходят из строя
yopp
play.db-ai.co на аталасе работает, ни единого разрыва с мая. все ошибки в коде :)
Anonymous
благодарю за инфу, у меня при инициализации приложения просто коннект стринг к монге там по умолчанию шардинг включен получается, сегодня с траблой столкнулся, что три коллекции доступны, а при попытке подключится к одной из коллекций - ошибка, что не может до хоста достучаться. Через компас, тоже отдает диал еррор
yopp
бесплатно шардинга там нет
Ilya
если нужны durable reads, то majority
Как оказалось, все равно возникает write conflicts. Пробовал и majority, и Local, но, еще раз перечитав официальную документацию, понял, что это не то, что мне нужно. На самом деле у меня такая проблема, что необходимо совершить последовательность операций (чтение и обновление) над несколькими документами атомарно, в то время как в них параллельно вне транзакции записываются данные. Вот думаю, как это сделать, хотя сомневаюсь, что есть возможность отключить блокировку при совершении транзакции.
yopp
> в то время как в них параллельно вне транзакции записываются данные. если вних вне транзакции записываются данные, то данные которые были видны внутри транзакции теряют актуальность или можно ещё сказать вступают в конфликт
yopp
как вы ожидаете что это закончится-то?
Ilya
м-да, это логично, придется видимо менять способ организации данных в базе
yopp
а что это за даные?
Ilya
а, и еще тогда вопрос, а countDocuments приводит к каким-нибудь блокировкам?
Anonymous
"Изучить основы mongodb за 1 час" - просто положи сенситивные данные на бесплатный хост от mongodb atlas ))
ᅠ ᅠ ᅠ ᅠ
"Изучить основы mongodb за 1 час" - просто положи сенситивные данные на бесплатный хост от mongodb atlas ))
причем, что интересно, с одним видом коннекта, где srv, всё норм, а с тем, что без srv нельзя достучаться
Anonymous
причем, что интересно, с одним видом коннекта, где srv, всё норм, а с тем, что без srv нельзя достучаться
В итоге просто на свой хост все перенёс, в целом монга достаточно интересная, именно гибкая и позволяет сохранять быстрый темп разработки, где в реляционке пришлось бы времени больше уделять
Anonymous
Только если разработчик ленивый, грабли везде раскидает
Ilya
а что это за даные?
В рамках транзакции я хочу осуществить авторизацию подключаемого ко мне стороннего сервера, но проблема в том, что в те документы, которые задействованы в транзакции (как на чтение, так и на запись), также постоянно записываются данные статистики, причем не транзакционно, а обычными операциями, причем записываются постоянно и в большом количестве. Поэтому транзакция в данном случае просто не сработает, будет постоянно вылезать конфликт записи. Вот в такое затруднительное положение попал.
Ilya
А зачем вам тогда транзакции если данные на момент выполнения запроса будут априори другими? Разберитесь с логикой ваший действий т.к очевидно вы и без транзакций нормально проживете
я мог бы обойтись и без транзакций, да, но в таком случае если в процессе авторизации возникнет какая либо ошибка, мне придется ручками откатывать все изменения, которые уже успели записаться в базу. Поэтому я попытался сделать все это транзакционно, но теперь вижу, что получилось хреново.
yopp
Нормализуйте документ таким образом, чтоб авторизационная информация не пересекалась со статистикой
yopp
Но я бы собрал для начала статистику о том, сколько retry надо сделать
Semyon V
Как быть, если основной сервер ушёл в небытие (привет, Online.net), а вспомогательный завис в SECONDARY?
Semyon V
Переконфигурация реплики сделана, тем не менее он всё ещё в этом статусе
Semyon V
Кстати переконфигурация сделана через {force: true}, ибо делалась она на единственном живом сервере
Semyon V
Друзья, пожалуйста, это срочно
Semyon V
Ответ: лёгший PRIMARY не должен присутствовать в конфигурации реплики
Пр. Вова
Вопрос новичка. Есть такое подключение: var mongoose = require('mongoose'); console.log(mongoose.version); const urlDbAtlas = "mongodb+srv://VVVMriya:************@clustermriya-xfpul.mongodb.net/test?retryWrites=true&w=majority"; mongoose.connect(urlDbAtlas, {useNewUrlParser: true}, function(err){ if (err) throw err; console.log('Successfully connected'); }); А выбивает: (node:15000) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [cluster.... Что не так
Пр. Вова
битый день с этим морочусь
Пр. Вова
првоерьте доступность сервера и порта
Спасибище!!! Если бы не искал это решение, после твоего совета, проверить бы смену IP на серваке вжизнь не додумался. По ходу 3G с мобильного для раздачи WF на ноут дает свои корректировки.
Egor
Спасибище!!! Если бы не искал это решение, после твоего совета, проверить бы смену IP на серваке вжизнь не додумался. По ходу 3G с мобильного для раздачи WF на ноут дает свои корректировки.
Да в общем то проверка сетевой доступности - первое что должно приходить в голову, тем более что ошибка подключении прям в выводе
Пр. Вова
Так я свой ип настроил и забыл, а про то что он может меняться и как я к инету подключен не подумал. Вот и думал про пароль не верный что ли
Пр. Вова
даже менял его.
Пр. Вова
Вопрос для профи знатоков телеграмма! Мне нужно что бы пользователь, когда зашел в диалог к моему боту смог выбрать и отправить ему контакт своего (выбранного) контакта (друга, страницы или чата). Возможно ли это сделать изнутри диалога?
Пр. Вова
Спасибо за ссылку!!!👍
Oleg
Ребяты, а кто какими облачными хостами пользуется для монги? Начал смотреть требования по развертыванию, достаточно геморно и накладно самому кластер поднимать. Яндекс и мэйл глянул. А что интересно есть иностранное?
Oleg
Атлас?
Я там что-то не очень понял историю с azure, aws и гугл. У меня приложения живут на других сервисах
Edouard
Привет. Пытаюсь сделать проекцию в той ситуации, в которой необходимое поле (boolean) в документе может отсутвовать. Соответственно, пробую его добавить с нулевым значением, вот так: 'has_items':{'$add':{$ifNull: ['has_items', 'false'] } } В результате следующая ошибка: '$add only supports numeric or date types, not string' При проставлении 'has_items', '0' - аналогично. Вопрос: как добавить поле в проекцию в том, случае, когда оно не всегда присутствует в документе? Спасибо.
Edouard
Спасибо. С этого и начал. Включая google, so и джиру монго. (InvalidPipelineOperator): 'Unrecognized expression '$addFields'' on server ip:port'
yopp
Вместо $project используйте $addFields или добавьте после $project если там есть другие трансформации. https://play.db-ai.co/m/XT4hOLkkgAABTGVJ И проверьте что у вас монга 3.4+. Если более ранняя то можно в $project придётся перечислить все необходимые поля
Edouard
Спасибо. монго 4+, добавлю отдельным действием. Пайплайн уже довольно-таки развесистый и одной из целей было избегать добавления доп. этапов ( чтобы окончательно в нем не застрять ) p.s.: добавил условие в доп. шаг, кажется костылем, но работает.
Anonymous
привет,есть шарящие по объединению коллекций mongoDB?нужно объеденить 2 коллекции по одному значению
yopp
привет,есть шарящие по объединению коллекций mongoDB?нужно объеденить 2 коллекции по одному значению
Если вы хотите обновить документы одной коллекции документами из другой коллекции, находя пересечение по какому-то атрибуту, то самый простой вариант перебирать документы последовательно из одной коллекции и делать update в другой. А ещё лучше, объединять документы в приложении по вашей логике и сохранять в третью. Ну и в любом случае сделать резервные копии обеих коллекций
Lev
У нас на N (не много) коллекций должна быть сквозная нумерация. Это можно реализовать автоматически?
Lev
Даже хуже. У нас есть N коллекций. Они заполняются по одинаковым правилам. У каждой записи в этих коллекциях есть historyId и есть number. historyId повторяется в этих коллекция (внутри одной коллекции). То есть сколько то записей в каждой коллекции имеют одинаковый historyId. При создании новой записи, если будет новый historyId, то надо ставить новый numnber. number равен количеству уникальных historyId во всех коллекциях. Как то так.
Lev
То есть или инкремент какой то хитрый, или просто считать все хистори каждый раз или хранить последний хистори id.
yopp
Вообще табличные хранилища приучили инженеров фатальной вещи — идущим подряд номерам. Идущие подряд номера это безумно дорого, сложно и практически никогда не решает никакой задачи кроме псевдо-эстетической. Если вам необходимо реализовать жесткую сквозную нумерацию, то скорее всего у вас какая-то очень большая проблема в архитектуре связей между данными. Не представляю даже, сколько процентов мирового ВВП тратится на никому не нужные циферки.
Lev
@dd_bb ну, мы пытаемся в начале интегрироваться, а дальше уже менять сам бизнесс. Но сначала - надо интегрироваться. И у них есть сквозная нумерация (я с вами согласен смысла от инкремента мало)
yopp
Если вы читаете, то просто забейте. Сделайте задачу которая раз в сутки проверяет что номера не пересекайся или если что генерирует тревогу. Если пишите, то не надо автоматизировать. Заведите третью коллекцию, в которой храните внешний «инкерементальный» номер и обычный objectid
yopp
Возрастающие счётчики можно сделать на $inc, в отдельной колдекции, при условии что вы никогда не будете делать find, а будете только делать только update с $inc. Будут пропуски, но будет быстро надёжно. Если без пропусков то транзакции и retry hell
yopp
Но мне кажется самый простой способ вообще полностью на их сторону свалить проблему, если есть возможность. Может быть их API умеет само назначать номера.
Lev
@dd_bb Я сам апи и пишу. Ну апи должно на основании чего то номера назначить. На основании инфы из бд например.
yopp
Вы же говорили что вы с чем-то интегируетесь, вот оттуда и берите
Alexey
Коллеги, всем привет! Подскажите идиоту, когда нужно создавать индекс одного поля: до загрузки данных в коллекцию или после?))
Lev
Вы же говорили что вы с чем-то интегируетесь, вот оттуда и берите
Я имел ввиду что интегрируемся с существующим бизнесом %) Он бумажный.