Vyacheslav
Приветствую всех! Вопрос по драйверу монги для C# Как правильно настроить сериализацию Guid? Insert работает правильно, в коллекции появляется поле типа UUID А при запросе Builders<T>.Filter.Eq(x => x.Id, id) в БД уходит GUID в виде BinaryData(3, ......) и ничего не находит в БД
Vyacheslav
вводимый тип данных какой? искомый тип данных какой? это играет роль
В шарпе использую Guid, тип подобный UUID, но сериализуется в бинарный вид иначе
Vyacheslav
Как задаю в модели Guid, так и поиск через фильтр делаю Guid
Vyacheslav
Если делаю все по умолчанию - все работает. Но я хочу что бы в коллекции тип _id был UUID
Alexandrr
В шарпе использую Guid, тип подобный UUID, но сериализуется в бинарный вид иначе
скорее всего дело в особенностях поиска по бинарному типу данных. можно посмотреть тут: https://stackoverflow.com/questions/36305563/query-for-binary-data-mongodb
Vyacheslav
скорее всего дело в особенностях поиска по бинарному типу данных. можно посмотреть тут: https://stackoverflow.com/questions/36305563/query-for-binary-data-mongodb
не совсем. как раз "по умолчанию" GUID попадает в поле как BinaryData(3, ...) и тогда все работает
Vyacheslav
А когда настраиваю сериализатор - в коллекцию попадает валидный UUID (при insert), но запрос find() все еще сериализует GUID как BinaryData(), а не UUID
Vyacheslav
Это уже проблема с драйвером именно, но где спросить не знаю, кроме как тут :(
Alexandrr
@dd_bb или @yatoba в курсе скорее всего
Nick
Это уже проблема с драйвером именно, но где спросить не знаю, кроме как тут :(
в их жире https://www.mongodb.com/docs/drivers/csharp/current/issues-and-help/#std-label-csharp-issues-help
Nick
А когда настраиваю сериализатор - в коллекцию попадает валидный UUID (при insert), но запрос find() все еще сериализует GUID как BinaryData(), а не UUID
и еще есть целая секция про гуиды, возможно там чтото вам поможет https://www.mongodb.com/docs/drivers/csharp/current/fundamentals/data-formats/guid-serialization/
Никита
Здравствуйте! При работе в котлин SpringBoot проекте с монгой возникла проблема синхронизации, одна и та же запись коллекции требуется для работы в нескольких одновременно выполняющихся потоках. Пришло в голову при каждой попытке установке нового значения в поля объекта в базе данных делать обновление данных и сразу же перезаписывать их. Что посоветуете посмотреть по данной теме, и может кто-то знает типичную реализацию обсервера или апдейтера, который будет обновлять бины при каждом запросе на чтение/запись данных, либо какой-либо скедулер, который независимо от потока будет постоянно обновлять коллекцию монги и тянуть с нее обновленные данные
Никита
а глобально в чем суть того что делаете и почему сложилась ситуация как сейчас?
Есть коллекция с состояниями операторов исполняющих механизмов. их там штук 10 -20. По каждому из них есть запись в монге, хранит там поля занят/не занят, массив с задачами, которые он получил в очередь на исполнение и еще куча полей. И когда начинается управление очередью задач, нужно сделать запрос к конкретному механизму и добавить в массив с задачами вот эту новую задачу. Проблема в том, что механизм почти все время занят и информация о нем используется в момент выполнения задачи, то есть перед тем, как начать выполнение задачи (оно может длиться 1 минуту, может 5 часов и более) в коде нужен статус этот механизма и информация о его состоянии из монги. И вот когда другую задачу пытаюсь поместить в очередь задач, как я понимаю, я тяну ту копию объекта, которая была в тот момент, пока механизм не стал занят, а мне нужно в двух разных потоках изменить разные поля одного и того же объекта монги. Ну и и получается, что сохраняется в итоге в базу непойми что, кто раньше тот и сохраняется
Alexandrr
Есть коллекция с состояниями операторов исполняющих механизмов. их там штук 10 -20. По каждому из них есть запись в монге, хранит там поля занят/не занят, массив с задачами, которые он получил в очередь на исполнение и еще куча полей. И когда начинается управление очередью задач, нужно сделать запрос к конкретному механизму и добавить в массив с задачами вот эту новую задачу. Проблема в том, что механизм почти все время занят и информация о нем используется в момент выполнения задачи, то есть перед тем, как начать выполнение задачи (оно может длиться 1 минуту, может 5 часов и более) в коде нужен статус этот механизма и информация о его состоянии из монги. И вот когда другую задачу пытаюсь поместить в очередь задач, как я понимаю, я тяну ту копию объекта, которая была в тот момент, пока механизм не стал занят, а мне нужно в двух разных потоках изменить разные поля одного и того же объекта монги. Ну и и получается, что сохраняется в итоге в базу непойми что, кто раньше тот и сохраняется
https://www.mongodb.com/community/forums/t/preventing-concurrent-updates-to-ensure-every-thread-gets-a-unique-id-value/14378 ещё ответ тут есть https://stackoverflow.com/questions/65722031/mongodb-multiple-threads-updating-same-document-at-same-time и тут
Nick
Есть коллекция с состояниями операторов исполняющих механизмов. их там штук 10 -20. По каждому из них есть запись в монге, хранит там поля занят/не занят, массив с задачами, которые он получил в очередь на исполнение и еще куча полей. И когда начинается управление очередью задач, нужно сделать запрос к конкретному механизму и добавить в массив с задачами вот эту новую задачу. Проблема в том, что механизм почти все время занят и информация о нем используется в момент выполнения задачи, то есть перед тем, как начать выполнение задачи (оно может длиться 1 минуту, может 5 часов и более) в коде нужен статус этот механизма и информация о его состоянии из монги. И вот когда другую задачу пытаюсь поместить в очередь задач, как я понимаю, я тяну ту копию объекта, которая была в тот момент, пока механизм не стал занят, а мне нужно в двух разных потоках изменить разные поля одного и того же объекта монги. Ну и и получается, что сохраняется в итоге в базу непойми что, кто раньше тот и сохраняется
вы используете какуюто орм с ентитями для работы с монгой или выполняете апдейты вручную?
Никита
вы используете какуюто орм с ентитями для работы с монгой или выполняете апдейты вручную?
для создания инстанса базы данных использую springFrameworkMongoBatabaseFactory, а для работы с коллекциями MongoDbClientMongoCollection (синхронный драйвер), в коде работаю с котлиновскими моделями объектов
Никита
вот модели как сохраняются, через репозитории и save/update?
через апдейт не сделал я еще, сейчас насколько помню каждый раз replaceOne вызывается, потому что объект коллекции представляет собой мапу <String, Any>
Никита
вот модели как сохраняются, через репозитории и save/update?
почти никогда нет информации о типе того, что может там лежать
Никита
ну вот и корень проблемы
надо переделать и помочь должно?
Никита
ну вот и корень проблемы
нет случайно на короткой руке реализация через апдейт?
Nick
нет случайно на короткой руке реализация через апдейт?
вытащили файндом, поменяли объект, сохранили через save
Никита
вытащили файндом, поменяли объект, сохранили через save
хорошо, попробую сегодня сделать, отпишусь потом
Никита
спасибо большое!
vbbbb
есть группа общая для баз данных ? обсуждение
Fra®
Здравствуйте. Подскажите пожалуйста как можно сохранить его в базе данных mongo?
Данил
Привет ребят, посоветуйте самый доступный сервер для node.js
Alexandrr
Здравствуйте. Подскажите пожалуйста как можно сохранить его в базе данных mongo?
персональные данные, пароли и прочую конфиденциальную информацию нужно строго и всегда хранить только в шифрованном виде и ни как иначе. https://www.mongodb.com/docs/manual/reference/method/ClientEncryption.encrypt/
Null
Объясните новичку для чего нужен опенсервер для работы с монго? И чем этот сервер отличается от того, который я запускаючерез express js?
Vladyslav
персональные данные, пароли и прочую конфиденциальную информацию нужно строго и всегда хранить только в шифрованном виде и ни как иначе. https://www.mongodb.com/docs/manual/reference/method/ClientEncryption.encrypt/
Просто телефон - это не персональные данные, это контактные данные, поэтому их шифровать не нужно. Также само как и адрес доставки.
Alexander
Просто телефон - это не персональные данные, это контактные данные, поэтому их шифровать не нужно. Также само как и адрес доставки.
Телефон относится к персональным данным, с адресом сложнее и нужно вникать в юридические тонкости.
Vladyslav
Телефон относится к персональным данным, с адресом сложнее и нужно вникать в юридические тонкости.
Не всегда, как описал, большинство случаев - он относится к контактным данным
Илья
Всем привет! 1. Подскажите, есть ли в монге возможность искать документы по дате создания (если внутри документа нет соответствующего поля)? 2. Как в компасе отсортировать документы, к примеру больше такой даты: Tue Nov 01 2022 07:00:20 GMT+0000 (Coordinated Universal Time)
Alexander
чтобы офильтровать, то если нужно больле, то добавить фильтр { timestamp: { $gte: <дата>} }
Alexander
только нужно привести к одному типу, если например хранится в формате ISO-строки, то и подсталять в таком формате
Илья
Пробую вот так и всячески по-другому — не работает
Alexander
первое, что приходит в голову - это использовать aggregate
Dmitry
Ого, интересно
Вот на JS пример
Илья
Alexander
можно тогда логины и пароли тоже не шифровать😅
Пароли не нужно шифровать - это точно!нужно хэши хранить))
Alexandrr
Пароли не нужно шифровать - это точно!нужно хэши хранить))
смотря в какой ситуации, но в большинстве случаев да. только не забыть посолить😜
Alexander
смотря в какой ситуации, но в большинстве случаев да. только не забыть посолить😜
Написал и вспомнил что сами храним пароли от сторонних серверов, шифрованные конечно…
Yuri
Aleksey
Привет, подскажите где ошибаюсь. Настраиваю х509 для Replica Set состоит из 3 узлов (PRIMARY и 2 SECONDARY) создал СА и им подписал и сформировал pem-файл для каждой машины (/CN уникальный для всех 3-х узлов) на каждом узле secirity пока так: security: #authorization: enabled #clusterAuthMode: x509 Стартую, инициализирую реплику добавляю юзера db.getSiblingDB("$external").runCommand({createUser:"CN=adm",roles:[{role:"root",db:"admin"}]}) Делаю рестарт всех mongod с authorization: enabled и clusterAuthMode: x509. И получаю "errmsg":"Could not find user /CN который прописан в certificateKeyFile: *.pem отдельно для каждой машины Тут вопрос, должен быть один и тот же pem-файл для всех трех узлов? Или при старте без авторизации нужно на каждой машине создавать юзера который уникальный в сертификате, но тогда какую роль ему выдавать?
vladissick
Подскажите пожалуйста, почему duplicate keys error возникает при попытке создания документа в модели которого есть референс на другую модель? Есть service и service_type модели. У service есть поле service_type: которое ссылается на вторую модель, и при попытке создания service c одинаковым service_type возникает эта ошибка
vladissick
Index unique прописан
в какой из моделей .
vladissick
?
Dmitry
Куда добавляешь
vladissick
Куда добавляешь
Как исправить ?)
Dmitry
Как исправить ?)
Не добавлять дубликаты либо удалить индекс, но если это для тебя сделали, значит на это была причина и ты что-то пытаешься сломать
vladissick
Не добавлять дубликаты либо удалить индекс, но если это для тебя сделали, значит на это была причина и ты что-то пытаешься сломать
Ну не добавлять дубликаты в данном случае не пройдет. Мне нужно чтобы модель service при создании ссылалась на service_type. Может есть другой способ relationships построить?
Dmitry
Говорю, удаляешь индекс и создаёшь либо не создаёшь новый
vladissick
Говорю, удаляешь индекс и создаёшь либо не создаёшь новый
Дропнул через дб локально. Это может быть из-за того что во второй модели свойства некоторые стоят как unique: true?
Alexandrr
Ну не добавлять дубликаты в данном случае не пройдет. Мне нужно чтобы модель service при создании ссылалась на service_type. Может есть другой способ relationships построить?
добавлять _id нужной записи, они по дефолту же есть в каждой записи в монге, зачем велосипед выдумать пытаться? назвать поле children or parent и всё, либо твой нэйминг
Alexandrr
я пытался добавлять через type: Ref, (object Id) но все равно дупликат поулчается
ну тогда как тебе Дмитрий выше указал, либо удалять индекс, либо изменять название связующего поля
Andrej
Подскажите, если для документов в коллекции созданы два индекса, индекс1 - поле1, индекс2 - поле 2, т.к. нужно иногда выбирать документы по одному полю, иногда по другому, иногда по двум полям (в таком случае этот "ключ" будет уникальным) - то при поиске документа по двум полям, монго будет искать в индексах же, а не лопатить всю базу? *с монго малознаком
Andrej
Будет использоваться только один. Более релевантный. Советую сделать составной индекс поле1 + поле 2
Спасибо за ответ! Если сделать составной, то при поиске по одному полю он будет задействован или надо делать 3 индекса?
Viktar
Я бы сделал 2. Поле 1 + поле 2 и поле 2
Andrej
Если повторно отправлена команда на создание индекса (идентичная, с таким же именем индекса), монго же не будет переиндексировать, а просто проигнорирует?
Айуб
всем привет как в mongo 5 версий включить авторизацию по ключу и репликацию?
Айуб
и не критично ли если сделать только 2 ноды, один мастер другой секондари
Айуб
всем привет как в mongo 5 версий включить авторизацию по ключу и репликацию?
авторизацию я включил, но репликация перестает работает
Мел
Всех приветствую ктонибудь помогите плз я написал серверок на node.js подружил его с mongo создал модель `const { Schema, model } = require('mongoose') const schema = new Schema( { name: { type: String, required: true, unique: true }, todos: [{ type: String }], // todos: [{ type: Schema.Types.ObjectId, ref: 'Todo' }], }, { timestamps: true, } ) module.exports = model('User', schema)` создал роут `router.post('/', [ async (req, res) => { try { const { name } = req.body const user = await User.create({ name }) res.json(user) } catch (e) { console.log(e) res.status(500).json({ message: 'Чет не летит пока юзер', }) } }, ])` и все здорово, создаю обьект `{ _id: "6405a554cd94e5d72f0c6087", name: "name", todos: [ ], createdAt: "2023-03-06T08:33:24.078Z", updatedAt: "2023-03-06T08:33:24.078Z", __v: 0 }`