Andrey
сначала так делал. db['tmp'].aggregate( [ { $merge : { into : "uniq_names", on: "_id", let: { needvalue: { $last: "$discovered" } }, whenMatched:[ { $set: { discovered: { $concatArrays: [ "$discovered", [ "$$needvalue" ] ] } } } ], whenNotMatched: "insert" } } ] ) здесь discovered - array из целых чисел, по факту timestamp даты загрузки(обнаружения)
Andrey
потом поменял структуру документов, и через монгоимпорт вставляю документы, а существующие с таким _id, обновляются путем добавления поля с нулевым значение, а само значение храню в названии поля
Andrey
сейчас в коллекции чуть более 2млрд записей, вставляется "сверху" еще 1 млрд, в итоге основная коллекия растет медленно, так как новых записей ну миллионов 100
Andrey
Но от размера коллекции не очень зависит, я тестировался и на 10-20 млн, видно что merge очень очень медленный
Andrey
само _id: {'name': String, 'someid': Int32(Int64)}
Andrey
документы все одинаковые и выглядят так:
Ilya
Snapshot isolation не даст создать два документа
он блокирует коллекцию на запись?
A
подскажите знающие вот такой запрос закидывает в массив ид , затем мне нужно сделать фильтр по этому массиву, но вылазит ошибка что 2й аргумент в $in должен быть массив, как сделать фильтр. Массив targetClientIds
Nick
Насколько хорошо монга переживает параллельное удаление объектов?
Хорошо переживает, а в чем могла быть проблема?
Kamil
допустим, я буду удалять данные пачками с разных нод
Kamil
но перед тем, как их удалить, я буду запрашивать идентификатры объектов
Kamil
а после этого удалять
Kamil
Что мешает сразу удалить?
мне нужно будет удалить по данным из монги данные из с3
Kamil
можно, конечно, сделать это ассинхронно, но тогда, если я удалю данные из монги, то я никогда их не удалю из с3
Nick
Тогда не о чем беспокоиться, главное удалить из монги только после очистки с3. А в самой монге даже попытка удалить уже удаленное ничего не поломает
Bogdan
Вопрос по MongoDB 5. Можно ли в коллекции типа timeseries изменить expireAfterSeconds, если коллекция уже существует, и не создавать новую?
Igor
c mongoose кто работал подскажите плс где задается к какой коллекции относятся схема и модель?
Igor
const Blog = mongoose.model('Blog', blogSchema); как понять в какой коллекции оно будет жить?
Igor
блин, нашел. не люблю когда есть вещи, которые в неявном виде, да еще и в другой форме. Во множественном числе от названия модели которая в единственном числе. Пойду попробую модели поназывать например Child или просто S как оно будет их коверкать во множественное. Неправильно это
Igor
нехорошо
Igor
dataSchema = new Schema({..}, { collection: 'data' }) говорят должно помочь
Igor
спасибо за внимание :D наша передача подошла к концу
Igor
Bob
😀👍🏼
Bob
Кто может подсказать? Я использую вставку InsertMany(collections, MyListClassCollection, dbname)
Bob
MyListClassCollection это List<MyClass> MyListClassCollection = new List<MyCass>()
Bob
Можно ли использовать UpdateMany с точно таким же списком ????
Bob
или при update только сам документ собранный в классе можно использовать? я имею ввиду не MyListClassCollection , а непосредственно объект моего класса <MyClass> ?
Bob
Просто не могу фильтр настроить таким образом... там необходимо передать поле Id, а оно находится в списке -> в классе -> поле Id
Bob
При InsertMany можно передать целый список объектов класса, а можно ли также сделать при UpdateMany???
Mr.Strange
Привет. Кто знает, как на уровне сервера монги задать readPreferred? или это только на уровне клиента задается?
Alexander Cheprasov
Всем привет, кто сможет подскать, если у меня пареметр phone уникальный и я делаю model.create(array) array - массив (20 элементов) с { phone: 79... } и один из номеров будет не уникальным. Какое будет поведение? Ни одна запись не добавится или добавятся все кроме одной или добавятся те что до не уникальной?
x
парни! А что за базы по умолчанию которые admin и local?
Oleg
парни! А что за базы по умолчанию которые admin и local?
и config. https://docs.mongodb.com/manual/reference/config-database/ админ для нужд администрирования, логины-пароли-права, и т.п. local для нужд хранения локальных данных при настроенных репликациях. https://docs.mongodb.com/manual/reference/local-database/
x
Спасибо! Такой вопрос ещё. Что хорошее посоветуете почитать, что бы понять что у Монги с масштабированием?
x
Я как понимаю она там есть чуть ли не из коробки?ъ
ASPIRIN
Спасибо! Такой вопрос ещё. Что хорошее посоветуете почитать, что бы понять что у Монги с масштабированием?
официальной доки вполне может быть достаточно https://docs.mongodb.com/manual/core/sharded-cluster-components/ https://docs.mongodb.com/manual/replication/
ASPIRIN
кстати кто-то игрался с монгой в in memory режиме?
ASPIRIN
я тут думаю поднять реплику на 3х нодах, и все не могу решится делать ли одну персистентной
Artem
Такой вопрос у меня, если идет запрос на обновления поля в документе то mongodb по факту под капотом будет перезаписывать документ а не обновлять его определенную область?
yopp
Полностью обновлять. Но для Copy-on-write хранилищ в целом нет разницы, так как страницы на которых произошли обновления будут в любом случае скопированы и записаны целиком
MDWIT
Ребята, всем привет Столкнулся с проблемой когда при populate limit неправильно работает, и выводит вместо 5 записей рандомное количество Использую mongose-paginate делаю запрос на получение коллекций и делаю populate для movies let queryData = {}, options = { lean: false, page: parseInt(req.query.page) || 1, limit: parseInt(req.query.limit) || 10, sort: {}, populate: { path: 'movies', model: Movie, options: { limit: parseInt(req.query.moviesLimit) || 5, skip: parseInt(req.query.moviesSkip) || 0 } } } await Collection.paginate(queryData, options) У меня из идей ограничить массив movies который возвращается с колеекциями еще на этапе запроса а потом уже для них делать populate, но не знаю как это сделать и вообще правильно ли это
R-lion
Ребят целесообразно ssh приватный ключ хранить в bd в зашифрованном виде ?
R-lion
такое приложение что для каждого пользоваться генерируется ключи уникальный они хранятся на компьютере, если пользователь зайдет в приложение через другой пк ключ не достать если только его хранить в bd
R-lion
я другого варианта не вижу
R-lion
мой друг говорит приватный ключ на то он и приватный что он не покидает за приделы компьютера пользователя, я ему говорю я его буду шифровать по паролю и хранить в bd
R-lion
передача данных с другими пользователями так скажем костыль https
R-lion
не хочу покупать ssh
R-lion
схема моя сложная ее не понять но мне надо хранить приватный ключ на стране сервера как вы думаете это нормально ?
Михаил
не хочу покупать ssh
Серты бесплатные есть
R-lion
передача важных данных по ним защищены ?
Михаил
Ну это тот же https серт
Михаил
Ничегг не защитит тебя от дыр в системе
R-lion
ну главное чтоб 3 лица не подключались по https
Михаил
Ну типо ты спросил норм ли хранить или нет Сама идея такого костыля не норм Но если уж делать такое то шифровать и класть в базу логично, да
R-lion
Спасибо большое Михаил я тебя услышал
Max
Приветствую! Скажите, используете ли вы в своих приложениях Schema Validation фичу монги? Очень часто имеется четкая структура данных, которую как раз и можно задать этой схемой. И эта валидация схемы она может помочь поймать какие-то ошибки, если приложение вдруг с данными пытается делать что-то не так. Тем более в 5-ой версии наконец начали давать ошибки с детализацией, что не так. Видите ли вы какие-то причины не использовать Schema Validation в приложениях с монгой?
Alexander
добрый день, подскажите как верно обновить все документы в коллекции? если делать db.tags.updateMany({}, {"$set": {"count": 0}}) - хочу обнулить поле во всех документах то монга съедает весь цпу на машине и машина перестаёт отвечать монга 3 ноды, 10 миллионов документов в коллекции. как обновить всю коллекцию, чтобы весь цпу не кончился
Max
Каким вы пользуетесь GUI для монги? Studio3t стоит ли своих денег? Хватит core лицензии, аль нужна Pro версия? Я когда-то очень давно Studio3t пользовался, и теперь не могу тестовый период пройти и посмотреть, удобна ли она мне. Классическая MongoDB Compas вроде тоже не плоха, за что же именно люди платят за Studio 3t?
Max
https://www.mongodb.com/developer/article/mongodb-5-0-schema-validation/ — якобы в монге теперь ошибки на валидацию схемы более детальны, и можно понять в чем дело. Но как эти ошибки получить? Может быть надо что-то в базе настройки поменять? Я сделал колекцию, к ней есть валидация схемы. Но вот только я по прежнему не вижу никаких деталей в ошибках, вот пример: WriteError({ "index" : 0, "code" : 121, "errmsg" : "Document failed validation", "op" : { "_id" : ObjectId("611a3229fdac89550c54df84"), "name" : "b1" } }) Т.е. нет тут никакоких деталей почему валидация провалена (а было пропущено обязательное поле). Версия монги — 5.0.2
Alex
много всего перепробовал, остановился именно на нём
Alex
строжайше рекомендую
Max
насколько я понимаю, вам сюда: https://docs.mongodb.com/manual/core/schema-validation/
Да, я это прочел. Но только не понимаю, почему в этих примерах показывается подробное сообщение об ошибке, а у меня лишь малоинформативное “Document failed validation, full error: {'index': 0, 'code': 121, 'errmsg': 'Document failed validation’}” Вот максимально простой пример на питоне: schema = {"$jsonSchema": {"required": ["name", "value"]}} col = db.create_collection("t0", validator=schema) col.insert_one({"_id": 2, "name": "n2"}) Использую последний драйвер, серовер версиии 5.0.2. Там же пробовал инсертить через консольную mongosh, череб MongoDB Compas — и везде ошибка максимум инфы Document failed validation У меня подозрение, что надо какую-то настройку на сервере включить. У меня был сервер еще с 4-ой версии и я апгрейдил существующую БД до 5-ой. И вот возможно из-за этого у меня по прежнему нет информации что именно с валидацией не так.
Igor
подскажите пожалуйста, правильно ли мыслю. У меня документ, в документе поле массив. Я ищу документы у которых в массиве есть элемент с определенными полями и их значениями. {someArray: {$elemMatch: {someProperty1: 'a', someProperty2: 'b'}}} Он мне находит те документы, что нужно. Теперь мне надо ещё как-то заполучить данные из того элемента массива, по которому прошло совпадение. (Это делается в стадии project?) Я вкрячил просто считай весь этот запрос в project и он мне вроде фильтрует то, что нужно. Но я бы хотел замержить нужные поля из найденного элемента массива. Направьте плс что гуглить, а то я пробовал $first и получил просто что придется, а не что нужно :D
yopp
https://docs.mongodb.com/manual/reference/operator/projection/elemMatch/#mongodb-projection-proj.-elemMatch
yopp
https://docs.mongodb.com/manual/reference/operator/aggregation/filter/
Jamal
у heroku нет своего mongodb? как можно к нему подключится ?