RapidCodeLab
но проблема есть, и когда говорят "нужно", что делать...
yopp
Dmitriy
на самом деле бизнес готов принять все что угодно, что не будет нести убытков и будет нести прибыль. в случае с инкрементом тут проблема именно программистов, которые годами привыкали к этому и теперь инерция мешает делать по другому
RapidCodeLab
бизнес так "видит", на него не могу повлиять)
RapidCodeLab
так даже в крупных шопах же)
yopp
В этой группе я уже устал об этом говорить
RapidCodeLab
yopp
RapidCodeLab
я лично понимаю, что человеческий id заказа не нужен
RapidCodeLab
Нет, это не удобно для человека
в dns так, приходит смс с номером заказа, на точке показываешь смс и тебе твой заказ отдают, я так понимаю они этот номер руками вводят в комп
RapidCodeLab
Dmitriy
Dmitriy
RapidCodeLab
RapidCodeLab
я еще раз повторю, я сам против всяких автоинкрементов и id для человека)
RapidCodeLab
но я , да, делаю id для людей) грешен) они выглядят как то так gdgdgh-232
Dmitriy
как еще один минус id-и для людей - это упрощение возможности перебора. а это уже факт влияющий на безопасность системы и соответственно финансовым потерям бизнеса. и вот это уже очень хороший аргумент для всех любителей инкремента от бизнеса. сам регулярно им пользуюсь
RapidCodeLab
RapidCodeLab
но вообще, да
yopp
yopp
Вы похоже видите хорошо
RapidCodeLab
Это ужасный номер
как есть( исправимся. для ПО id родной конечно, objectid
Aleksey
Возможно в пределах одной коллекции в двух разных документах внести изменения гарантированно (убрать элемент в одном документе и добавить в другой; хочу хранить категории и списки товаров в этих категориях, чтоб в самих товарах не возиться с этим тк категории нужны только для красивого вывода) ?
yopp
как есть( исправимся. для ПО id родной конечно, objectid
В зависимости от применения, есть разные проблемы. Есть символы которые выглядят похоже, в том числе цифры. Есть символы которые звучат похоже.
Сделать искусственный и удобный для людей идентификатор это очень сложная и дорогая задача
yopp
Aleksey
Не очень понимаю кейс с убрать/добавить
Как транзакции. Предполагаю что будут коллекции "категории товаров", в документе будет список ссылок на товары. Если пользователь изменил группу для товара, то из одного документа "категория товаров" надо вырезать этот товар, а в другой вставить. Т.е. получается как транзакции, чтоб не задвоить присутствие в двух и не убрать из обоих при ошибке.
yopp
yopp
В этом случае у вас изменения будут атомарны в одном документе
Иван
Здравствуйте. Подскажите пожалуйста, возможно ли не зависимо от типа поля проверить длину его в bytes?
Иван
Или проверить на ноль byte тип ObjectId
Dmitriy
вы хотите проверять на уровне бд? на уровне приложения не вижу ни каких проблем, а на уровне бд не понятен кейс
Иван
На уровне бд
Иван
Имею такое
ObjectIDs must be exactly 12 bytes long (got 0)
Dmitriy
На уровне бд
ну как вариант вот это использовать: https://docs.mongodb.com/manual/reference/operator/aggregation/strLenBytes
Dmitriy
Иван
Пробовал, но это для строки. Вываливается ошибка
Dmitriy
хотя думаю что у вас go
Dmitriy
осталось только со структурой и драйвером определиться
Иван
Это происходит при find. Да, go
Dmitriy
покажите структуру в которую у вас идет декодинг?
Dmitriy
и какой все таки драйвер?
Dmitriy
глобалсайн или офф монго?
Dmitriy
Ок, покажите структуру и json выбираемой записи (если через любое gui выборку сделатьд
Иван
iter = db.C("subscriber").Find(bson.M{"_id": bson.M{"$in": masters}}).Iter()
Иван
masters = [] bson.ObjectId
Dmitriy
Хм, а вы понимаете свой запрос?) вы пытаетесь найти все записи которые входят в пустой массив?
Dmitriy
Такой запрос на выходе должен давать пустой резултсет
Иван
Я показал тип
Dmitriy
Я не просил тип) я просил структуру в которую у вас декодируется результат поиска)
Иван
Т.е. в master содержится какой ObjectId, у которого len(ObjectId) = 0 bytes грубо говоря
Dmitriy
Почему он там содержится? Вы хотите сделать поиск по записям у которых нет поля _id?
Dmitriy
?
Dmitriy
Иван
видимо драйвер выдаёт ошибку потому что в masters содержится len(ObjectId) = 0 bytes
Иван
один из
Иван
потому что это массив
Dmitriy
Dmitriy
А обжектид должен быть 12 байт
Dmitriy
потому что это массив
И что что массив, что вы хотите сделать? Расскажите какую выборку вам надо сделать?
Иван
Мне нужно на стороне бд найти такие записи, где ObjectId = 0 bytes, грубо говоря
Иван
Я уже сделал кое-что
Иван
db.getCollection('customer').find({$or : [
{"master_id" : null},
{"master_id" : NaN},
{"master_id" : { $not: { $type: 7 }}},
{"master_id" : { $gt: [{ "$strLenBytes": "master_id" }, 0]}}
]})
Иван
{"master_id" : { $gt: [{ "$strLenBytes": "master_id" }, 0]}} - но это отработает на строке, а если попадётся тип ObjectId о нужно проверить длину этого поля в byte
Иван
Так много проверок потому что не известно каким типом стало это поле и почему там 0 byte
Dmitriy
Хм, мне кажется вам проще сделать кастомный анмаршалер на структуру и в нем проверку на обжектид. И упасть с паникой если вы попали в условие с принтом документа
Dmitriy
Чем описывать все возможные условия в запросе
Dmitriy
А ещё проще не мучаться и сделать миграцию которая установит новые обжектид для коллекции
Иван
на боевой делать проблематично. А если что-нибудь отвалится
Dmitriy
Дамп с боя на локалке залейте) напрягите девопсов помочь)
Иван
А всё-таки можно в запросе "померить" длину поля?