yopp
про $$this
yopp
про сравнение элементов, то скорее всего ещё один reduce по readBy, в котором ставить true в $$value если элемент совпал с искомым
Serhii
@dd_bb thx
yopp
зачем вам транзакции
yopp
у вас есть два варианта: либо кешировать информацию о потомках в родительском объекте либо каждый раз вычислять есть ли у объекта потомки. других вариантов нет
Артем
Добрый вечер. Помогите, пожалуйста, с такой проблемой (вопрос связан с pymongo): Сделал репликацию на сервере монги, чтобы делать мультидокументные транзакции. После этого попробовал тестовый код: db_client = pymongo.MongoClient('localhost', 27017) col = db_client['test_db']['test_col'] with db_client.start_session() as session: with session.start_transaction(): for i in range(10): col.insert_one({'msg': i}, session = session) if i == 8: raise Exception По моей логике в базу данных ничего не должно записаться, поскольку запись находится в блоке with session.start_transaction() и на восьмой итерации выскакивает Exception, из-за которого должен выполниться метод session.abort_transaction(). Однако вместо этого вылазит ошибка: pymongo.errors.OperationFailure: BSON field 'insert.startTransaction' is an unknown field. Что странно, вся та же последовательность действий на сервере с MacOS приводит к успешной отмене транзакции. А на Ubuntu 18.04 не работает
yopp
Артем
Версия 3.6.3 на убунте, на маке 4.0.3 . Видимо это ответ на вопрос)
yopp
За одно и версию монги. Вам нужна 4.0.x
yopp
А, похоже ошибка уже из монги. Если 3.6.3 версия монги, то да, это ответ на ваш вопрос :)
Артем
Все работает, спасибо
Denys
Здравствуйте. С монго нет опыта. Помогите решить вопрос, у меня есть таблица со зданиями, внутри схема с этажами, внутри этажей есть комнаты. Задача найти здание со свободной комнатой. Мне нужно комнаты вынести отдельно и тогда делать популяцию с резервами и делать запросы какая из комнат не имеет резервов или как? Можете помочь...
Denys
хороший вопрос... вот начинаю понимать что мне нужна таблица с какими то в стиле Доступных и там уже манипулировать с датами и комнатами правильно?
Artem
Зачем вообще монгу для такой задачи использовать?
Denys
есть коллекция резервация у меня сейчас
Denys
исторически так сложилось есть монго... а как тогда?
Denys
я работал только с реляционными бд по этому с монго много вопросов и не пониманий...
Никита
такая структура?
Denys
да
Denys
и есть коллекция reservations [{roomID, date}]
Никита
getCollection('buildings').find({floors.rooms.free: true})
Denys
так у меня же завязка на дату а резервации в коллекции резерваций
Никита
так у меня же завязка на дату а резервации в коллекции резерваций
мне приходит в голову сходу неэлегантное решение через aggregation framework я не особо уверен, что это хорошее решение, пусть другие поправят, если компетентны
Denys
может мне структуру нужно поменять? и сделать как то в более монго стиле, но у меня нет пока идей...
Denys
7 этажей по 30-40 комнат
Никита
вроде как 240 вложенных элементов - ещё не тяжело для монги у меня на ненастроенной базе проблемы с перформансом начались на 10-15 тысячах элементов в массиве где-то)
Denys
в общем вопрос на определенную дату найти комнату которой нет в резервации на эту дату, как такое можно сдлетать с монго?
Никита
если никто до дедлайна не предложит лучше идею, то вот дока: https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/
Denys
благодарю
Никита
если кратко изложить суть: через unwind дважды разложить массив, после чего отфильтровать результаты по наличию сущности резервации (в другой коллекции)
Никита
в общем вопрос на определенную дату найти комнату которой нет в резервации на эту дату, как такое можно сдлетать с монго?
вообще, было бы прикольно добавить в комнаты краткую инфу по резервациям, типа: { reservationId: 123, from: 2019-07-23 15:00, (это дата) to: 2019-07-26 10:00 (это тоже дата) } после чего добавить индекс на это поле и сделать его expired по полю to
Никита
тогда бы монга сама убирала эту штуку из документа по истечению срока резервации
Denys
хм. интересно благодарю очень!
yopp
в общем вопрос на определенную дату найти комнату которой нет в резервации на эту дату, как такое можно сдлетать с монго?
не очень важно монга у вас или нет, тут важно в принципе понимать алгоритм управления ресурсами самый простой вариант разделить большую проблему на две проблемы: список ресурсов и использование ресурсов во времени тогда задача найти свободный ресурс в какой-то временной точке будет сводиться к тому, чтоб найти разность двух множества: всех ресурсов и ресурсов занятых на искомый момент это можно решить двумя коллекциями, в одной хранить по одному документу на конкретную комнату, во второй как выше предложили хранить список «резерваций», с датами начала и конца использования. дальше делаете выборку по списоку резерваций, чтоб получить айдишники занятых комнат. делаете выборку по списку комнат, или сразу отбрасывая через $nin список занятых или отбрасывая уже на клиенте
Ярослав
setInterval(async () => { let users = User.find({ ban: false }); for(let i=0; i<users.length; i+=1){ if(users[i].biz.id != 0){ users[i].biz.zarp += users[i].biz.peop * config.peop await users[i].save() } } }, 5000); Почему не сохраняется? Ошибки в консоль не какой не выдает
Daniil
await на второй строке забыл
Ярослав
Не понял, после let?
Vadim
Не понял, после let?
let users = await User.find({ ban: false });
Ярослав
Спасибо!) Я хз, зачем убрал, типо до этого тестил не работало)
Max
Всем привет! А подскажите пожалуйста, MongoDB Charts on-premises платный или как? Меня смущает это предложение
Max
Владимир Т
увы просто с параметром —archive дамп весит много и не влез на диск
2019-07-17T02:29:56.243+0600 restoring users from /u01/backup/16.07.2019/admin/system.users.bson.gz 2019-07-17T02:29:56.425+0600 replaying oplog 2019-07-17T02:29:56.431+0600 Failed: restore error: error applying oplog: applyOps: not authorized on admin to execute command { applyOps: [ { ts: Timestamp(156321 v: 2, op: "u", ns: "config.system.sessions", o: { $v: 1, $set: { lastUse: new Date(1563217233633) } }, o2: { _id: { id: UUID("be22c554-817f-4657-b34f-b364ea239ad2"),, AEEDFD6C113127BF1AF7E0A3B75CBD4CB4A7F4C9D55F312BAF31096591C15335) } } } ], $db: "admin" }
Владимир Т
вот я получаю ошибку при восстановлении, хотя у юзера рут права
Владимир Т
По всей видимости нет
создам роль db.createRole( { role: "executeFunctions", privileges: [ { resource: { anyResource: true }, actions: [ "anyAction" ] } ], roles: [] } ) и дам права db.grantRolesToUser("root", [ { role: "executeFunctions", db: "admin" } ])
Владимир Т
это я в мануале вычитал для восстановления oplog
Simak
Доброго времени суток. Ребят, подскажите, на какие вы значение орентируетесь в первую очередь в wiredtiger, что бы понять что выделенного кеша достаточно?
Simak
Для решения какой проблемы вы используете настройки не по-умолчанию?
1. Потому что происходит переезд с физической тачки на LXC. Это страх перед ООМ. 2 мне не очень нужно грузить всю базу в wiredtiger cache, потому что хотелось бы сделать хороший баланс, загрузить в cache linux пожатую базу. 3. В связи с пееездном хотелось бы урезать ресурсы, потому что сейчас их достаточно много. И хотелось бы не промахнуться.
yopp
2 провальная идея
yopp
3 вероятнее всего тоже
Simak
Что во втором провального?
yopp
В том что в этом нет никакого особого смысла
yopp
Какую проблему вы решаете?
Simak
Это не проблемы. Так работает монга, она льет свою жатую базу в линукс кешь
yopp
Я отлично осведомлён. Я не прошу лекцию, я спрашиваю причину которая вас заставляет это делать
Simak
Мне нужно урезать ресурсы
yopp
Зачем?
Simak
Экономия)
yopp
Переезжайте на Atlas
yopp
Если у вас меньше пары сотен гигов данных, то оно скорее всего дешевле чем in-house, тупо по трудозатратам.
Anonymous
Щас Магомед стряхнет пыль с красных макасин и отожмет у кого нить оперативку и пару ssd
Hallo
Пугать людей так не стоит.
Anonymous
ну так непуганные люди и не пугаются , а пуганные просто будут на стороже
Anonymous
всем снов )
Farik
Привет всем, возник такой вот вопрос запустил я значит монго но я не могу зайти на 127.0.0.1:27017 (при этом в открыл доступ по этому порту) т.е. я не могу работать с базой, для этого я разварачиваю nod'e и при помощи mongoose я могу обратиться к бд
Farik
Мне всегда надо будет запускать монго потом подымать сервер что-бы взаимодействовать с бд?