Господин бумага
почему если делать так book.bookInfo.authors = authors; то в book.bookInfo.authors добавляется строковый массив вместо массива объектов? как такое лечить? (authors это результат работы .find())
Bohdan
нужен код, как ты это делаешь
Господин бумага
Господин бумага
я так же пробовал с лодашом, типа _.set...
Bohdan
на этапе присвоения у тебя authors это точно массив объектов?
Господин бумага
да
Господин бумага
если его в консоль вывести то он массив объектов
Господин бумага
а если после присвоения выводить уже book.bookInfo.authors то там уже строковый массив
Господин бумага
и каждая строка это объект в виде строки
Господин бумага
шо за бред
yopp
смысл в том, чтоб передать ключ, который позволит вместо перебора всей коллекции с самого начала, указать точку с которой будет работать limit
yopp
это может быть вообще всё что угодно
Bohdan
всмысле что угодно?
yopp
в смысле любое значение
yopp
в монге нет «порядка» в коллекции
yopp
objectid не гарантирует порядка
yopp
$natural тоже
Bohdan
получается я могу с каждой пачки в 50 объектов брать последний, и доставать следующие 50 элементов уже начиная с этого последнего элемента
Bohdan
правильно?
yopp
да
Bohdan
НО, если порядка нет, я же дубликатов могу наделать
Bohdan
с каждым последующим запросом
yopp
по этому вам нужно выбрать поле, которое будет определять порядок и по нему сделать индекс
Bohdan
у меня индекс есть по GUID айдихе
Bohdan
должно сработать мне кажется
yopp
если вы не укажете условие для $sort, то в этом случае у вас порядок будет неопределенным
Господин бумага
круто. но что с моим вопросом? поможете? ))
Bohdan
если вы не укажете условие для $sort, то в этом случае у вас порядок будет неопределенным
это тоже неэффективно т.к. для каждого такого запроса нужно будет сортировать всю коллекцию
yopp
по этому вам нужен индекс с правильным порядком
yopp
если сортируемое поле проиндексированно и порядок сортировки совпадает с порядком сортировки индекса, то дополнительной сортировки не требуется
yopp
потому что значения ключей в индексе уже отсортированы
yopp
по этому мы можем просто найти $eq и оттуда выбрать %limit% ключей, по которым фечнуть документы
Bohdan
я не уверен что для этого подходит Guid, но это поле проиндексировано и порядок сохраняется
yopp
что подходит это только вам известно :)
Anonymous
ребят
Anonymous
а чем хорош mongoose? он типо асинхронный?
Daniil
На главной странице сайта mongoose емко сказано какие преимущества он дает - "Mongoose provides a straight-forward, schema-based solution to model your application data. It includes built-in type casting, validation, query building, business logic hooks and more, out of the box."
Daniil
По сути это ODM для MongoDB с рядом удобных фич При этом он довольно тяжеловесный и если в нем нет нужды, то можно без проблем работать со стандартным драйвером для Node.js
Yurii
а чем хорош mongoose? он типо асинхронный?
У него есть хуки, .populate, и приведение к типам, которые описанные в "схеме"
Bro
2019-10-07T08:03:47.784-0400 I STORAGE [initandlisten] WiredTiger message [1570449827:783992][4256:0x7f8421f03a80], txn-recover: Main recovery loop: starting at 94476/58718976 to 94529/256 2019-10-07T08:03:47.785-0400 I STORAGE [initandlisten] WiredTiger message [1570449827:785023][4256:0x7f8421f03a80], txn-recover: Recovering log 94476 through 94529
Bro
монга сломалась =(
Bro
щаз несколько часов восстанавливаться будет
Bro
есть
CybernatiC
Снеси все и восстанови
Bro
However, if MongoDB exits unexpectedly in between checkpoints, journaling is required to recover writes that occurred after the last checkpoint.
Bro
не надо ниче сносить там с журнала восстановится
Andrey
Добрый день. В общем мигрировала БД на новый сервер. теперь встал вопроса бекапа. но вот незадача. скрипт со старой БД не проходит. Жалуется на Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed. Вот собственно и вопрос, я могу сделать юзера, или посмотреть логопас существующих? сам скриптик примерно такого рода: mongodump --host IPADDRESS --authenticationDatabase DBNAME --db DBNAME -u DBUSERNAME -p DBASSWORD --collection NAMECOLLECTION --query "{ \"addedTime\" : { \$gte: { \"\$date\" : \"date -d \"yesterday\" '+%Y-%m-%dT00:00:00Z'`\"} , \$lt: {\"\$date\" : \" date '+%Y-%m-%dT00:00:00Z'\"} }}" --out -|gzip >/PATHTO/NAME-`date +%Y-%m-%d.zip
Ivan
ну и db_assword тоже странно
Andrey
Пароль имелось ввиду пароль
Andrey
Конспирация
Oleg
а что значит "мигрировала на новый сервер", изменилась версия например?
IB
Добрый вечер
IB
Как можно сделать restore
IB
На монго
IB
Я backup делал , переустановил ос и теперь хочу обратно вставить данные
Andrey
не было юзера пароля
Ilya
используете монстра в виде монгуса с кучей своей логики и удивляетесь почему стало медленно? хотите быстро - используйте драйвера напрямую
Да дело то даже не в этом. Я вообще не понимаю, почему настолько увеличилось время запросы даже если мы отбросим мангус. Размер дока - всего навсего 0.5 мб, при допустимом максимальном значении в 16. В коллекции всего 1 документ, с которым я и экспериментирую. Но больше всего меня удивляет тот факт, что в Robo3T этот же док грузится в среднем за 4-6мс. И этот запрос не кэшируется, я прям специально компухтер перезагрузил, чтоб все было чисто на 100%. И еще делаю getPlanCache().clear() для коллекции. И все равно время запроса в Robo3T у меня 3-4 мс, на мангусе 500-600мс, а на драйвере от 30 до 150мс. Классный разброс, однако)
Bohdan
Ребята, которые мне сегодня рассказали про индексирование и сортировку по индексам в монге, это просто восхитительный инструмент, он прекрасно сработал в многопоточном режиме чтения вместе с blockingcollection
Ilya
Ни в коем случае нельзя ребутать систему когда меряешь производительность не запуска системы. Дальше монгус делает кучу доп логики по валидации вот и начинает умирать на сложных документах, зарепорьте пусть ускоряют
Окей, обязательно напишу им. Хотя что им там валидировать, если запрос на чтение. Надо будет на досуге посмотреть, как там в мангусе это изнутри организовано, может, найдется корень проблемы.
Nick
Это жрет приведение полученного их базы объекта к объявленной схеме
Nick
Более чес уверен что получить его из базы составляют все теже пара мс, а остальное логика
Alexey
Всем привет! Когда падает праймари и выбирается другой, нативный драйвер на ноде не реконнектится к оставшимся нодам, а просто падает в ошибку, это нормально? разве он сам не должен понимать, что один отвалился и надо к другим реконнектнуться? или эти ситуации надо самому обрабатывать?
Bro
чето монга будет пару дней походу в себя приходить )))
Alexey
Напиши пожалуйста как, вдруг кто встанет в это кроме тебя, чтобы найти по истории можно было
Вовремя заметил сообщение) у меня не работало, когда я полностью повторил весь сценарий, описанный здесь https://docs.mongodb.com/manual/appendix/security/ у меня не проходила валидация openssl verify -CAfile test-ca.pem test-client.pem openssl просто не понимал, что test-client.pem подписан test-ca.pem я не силен в сертификатах, но там при создании CA сертификата создается также промежуточный ia и уже он используется для подписи серверного и клиентского, так вот я просто не стал создавать промежуточный, а подписывал напрямую CA сертификатом, у меня все заработало
Ilya
Это жрет приведение полученного их базы объекта к объявленной схеме
К слову сказать, мне нужно запрашивать эти 10,000 значений для того, чтобы посчитать среднее значение по ним. И знаете, aggregation framework это делает, как ни странно, гораздо быстрее, чем запросить-посчитать ручками в коде (где то за 35 мс выполняется в среднем). И я бы так и делал, только вот одно меня смущает. Скорее всего эти агрегации будут ощутимо грузить базу. Учитывая, что данная статистика хранится для каждого пользователя приложения, делать это придется очень часто и много. И я сейчас на самом деле перед выбором: либо все таки доверится aggregation framework-у, пусть база сама считает да агрегирует, или все таки выгружать и считать самостоятельно (но тогда придется разбираться с медленными запросами). Это конечно супербалдежно - пользователь кликает на вкладку статистика, запрос уходит на сервер, и сервер начинает пыхтеть и целую секунду все это дело запрашивать, перебирать, считать. Да пользователь уснет от скуки, пока расчет закончится и результат вернется на фронт.
Nick
К слову сказать, мне нужно запрашивать эти 10,000 значений для того, чтобы посчитать среднее значение по ним. И знаете, aggregation framework это делает, как ни странно, гораздо быстрее, чем запросить-посчитать ручками в коде (где то за 35 мс выполняется в среднем). И я бы так и делал, только вот одно меня смущает. Скорее всего эти агрегации будут ощутимо грузить базу. Учитывая, что данная статистика хранится для каждого пользователя приложения, делать это придется очень часто и много. И я сейчас на самом деле перед выбором: либо все таки доверится aggregation framework-у, пусть база сама считает да агрегирует, или все таки выгружать и считать самостоятельно (но тогда придется разбираться с медленными запросами). Это конечно супербалдежно - пользователь кликает на вкладку статистика, запрос уходит на сервер, и сервер начинает пыхтеть и целую секунду все это дело запрашивать, перебирать, считать. Да пользователь уснет от скуки, пока расчет закончится и результат вернется на фронт.
в этом случае нужно садить и фиксировать требования: вам быстро, или не нагружать базу. Накидайте сценарий работы пользователя, оценить количество запросов и просто грузаните базу и посчитатайте что выгоднее. но советую еще взглянуть на схему без исопльзвоания массива, а какждое событие сохранять отдельным доком и тогда агрегация будет однозначно удобнее, и до кучи может снять часть проблем в дальнейшем, елси потребуется делать сбор статы поинтереснее чем просто среднее
Artur
Доброе утро, ребята!
Artur
Вопрос есть. Пытаюсь вывести записи - результаты поиска
Artur
Добавляю индекс так JobSchema.index({'jobTitle': 'text'});
Artur
Artur
Ребята, что-то не могу подсоединить удаленную MongoLAb к Robo 3t, гуглю, ничего нет
Artur
может ssh ?
Все вроде подключился норм, почему-то меня пароль от MongoLAb, а зашло по старому, видимо от DB там другой пароль, а не как от кабинета. Ты случайно не знаешь ответ на мой певрый вопрос?