Nick
Anonymous
Viktor
лол
Nick
Anonymous
rdcm
всем привет,
вопрос про read / write concerns, для replica set, есть ли возможность читать только с мастера?)
yopp
Да, readPref: :primary
https://docs.mongodb.com/manual/reference/read-preference/#primary
Ivan
А я думал, приложение выбирает, куда идти
rdcm
можно этим рулить, но есть нюансы
если для приложения важно всегда читать акутальные данные, а оно читает с реплики неактуальный стейт документа, то можно получить очень интересное поведение :)
rdcm
Nickname
Добрый день, нужно экспертное мнение. Дано задание подружить MongoDB с какими-нибудь фреймворком на python кроме Flask и Django. Какие есть адекватные варианты?
🇹 🇦 🇽 🇺 🇸
Привіт! Я думаю що Bottle нормальний варіант. Сам хочу спробувати.
Nickname
А что ещё можете порекомендовать? Вроде что-то нашел про Pyramid, Tornado, Pylons и Twisted
Ilya
Nickname
Сложно сказать, так как задание сформулировано весьма невнятно. Предположительно настроить фреймворк для работы с MangoDB
Nick
а кто задание выдал? на работе или студентишь?
Nickname
Второе
Nickname
То есть преподаватель сказал что-то вроде: "Хочу чтобы MangoDB, через фреймворк на python, чтобы всё прям красиво и без джанго и фласк"
Ilya
ну возьми любой фреймворк и к нему прикрути odm
Ilya
odm это что то вроде orm https://pypi.org/project/pymodm/ вот например
Ilya
чтобы работать с объектами а не на прямую с запросами
Ilya
ну то есть под словами "красиво" я понимаю что препод это имел ввиду
Nickname
То есть по этому списку смотреть грубо говоря
https://api.mongodb.com/python/current/tools.html
Nickname
Выбрать фреймворк и то чем подключить
Ilya
ну наверное да)
по поводу фреймворка посмотри на https://bottlepy.org/docs/dev/
Nickname
Спасибо
Ilya
ну в том плане что тебе нет особо смысла с асинхронными начинать работать , потеряешь время на понимании асинхронности и больше возни с кодом.
Ilya
так я только сейчас вижу что ты пишешь mangoDB, я если что не знаю что это такое
Bro
Bro
я бы не советовал орм для монги
Nick
я бы не советовал масло с батоном
yopp
Nickname
bottle бери
У нас задача поставлена нескольким людям. Каждый должен выбрать отдельный фреймворк. Поэтому подскажите ещё варианты без особых заморочек, пожалуйста
Nickname
Bandikoot
да и по поводу odm стоит скорее в группе по питону спросить
Bro
расскажите лучше зачем нжны ORM к монге?
Bro
я просто раньше юзал MongoEngine
Bro
но потом пришел к выводу что это ненужный костыль, которые еще дает неслабый минус к скорости операций
Bro
ну это для моих юз кейсов
Bro
сейчас я макс что юзаю просто вывожу операции с ДБ в отдельный объект где при записи идет валидация/нормализация с помощью Cerberus (python)
Bro
да и потом монга спроектирована для хранения документов, подгонять под нее ORM в духе SQLAlchemy (для реляционных БД) весьма сомнительное начинание.
Bro
query language в монге достаточно простой чтобы начать.
Bro
аггрегация так вообще
Bro
песня
Bro
ну я не говорю что эти проекты плохие и ненужные - кому-то проще начать с примрено того же с чем он и работал до этого. Перейти с алхимии на монгоэнджин, освоится и перейти на голый pymongo.
Andrew
Кто-то знает, если я использую findOneAndUpdate (mongoose) и upsert: true,
Можно ли как-то одновременно сделать $set и $push (циклом)
Avin
Avin
или массивом объектов
Andrew
пиши все объекте одном и $set и $push
у меня в модели вот такое поле
groups: [{
id: Number,
name: String,
membersCount: Number,
isAdmin: Number,
adminLevel: Number,
photo: String
}],
Мне в него нужно циклом добавить несколько обьектов
Avin
а $set зачем?)
Avin
пушай весь объект
Avin
{$push : {groups : {id:1, name: 'group'...}}, $set: {rootTitle: 'newTitle'}}
Avin
так не катит?)
Andrew
Bro
s0menickname
Andrew
$set: {
login: req.body.login,
password: req.body.password,
twoFa: {
checkIsCompleted: false
}
}
message:
'Cast to string failed for value "{ checkIsCompleted: false }" at path "twoFa"',
name: 'CastError',
stringValue: '"{ checkIsCompleted: false }"',
kind: 'string',
value: { checkIsCompleted: false },
path: 'twoFa',
reason: undefined }
undefined
В чем тут проблема? Такая вложенность не работает для set???
Avin
Andrew
покаж схему
login: String,
password: String,
twoFa: {
checkIsCompleted: Boolean,
isEnabled: Boolean,
type: String,
phoneMask: String,
},
Ну она больше гораздо, но проблема только с twoFa, если убрать из запроса, то проблем нет
Andrew
$set: {
login: req.body.login,
password: req.body.password,
twoFa: "123"
}
вот так даже работает
Avin
"twoFa.checkIsCompleted": false
Avin
вот так сделай
Avin
$set идет кстати мимо монгуза
Andrew
Andrew
оно и без сет не работает
Avin
ну то что false строкой падает в базу - мб ты всетаки строку ему суешь?)
Andrew
нет
Andrew
у меня upsert: true , мб это как то связано
Avin
хз тогда)
Andrew
заменил twoFa, на
counters: {
photos: Number,
friends: Number,
followers: Number
}
оно почему-то работает без ошибок
Andrew
twoFa -> twoFaAuth спасло ситуацию, мб это какое-то зарезервированное слово
Andrew
А как сделать, чтобы при findOneAndUpdate, те поля, которые я не редактирую, не обнулялись?
Nick
логично же что не обнулять
Nick
вы полностью производите действия в этом случае и только вы решаете что обнулять
Andrew
логично же что не обнулять
у меня есть twoFactorHandler
там я устанавливаю:
twoFaAuth: {
checkIsCompleted: false,
isEnabled: true,
method: type,
phoneMask: phoneMask
}
В дальнейшем, когда 2фа пройдена я устанавливаю
twoFaAuth: {
checkIsCompleted: true,
},
В итоге в бд остается только checkIsCompleted, все остальное исчезает, а я хочу чтобы все остальное также осталось
Nick
потому что вы устанавливаете новое значение для twoFaAuth, а не флаг. чтобы установить флаг нужно писать twoFaAuth.checkIsCompleted : true