yopp
в целом если есть возможность, то лучше писать данных так, как вы их будете читать
Max
в целом если есть возможность, то лучше писать данных так, как вы их будете читать
в целом понял, спасибо. в общем буду тестить/игратся/практиковаться)
AstraSerg
https://docs.mongodb.com/manual/core/index-intersection/
Круть. Спасибо, буду знать.
Max
что лучше юзать: mongodb $arrayElemAt или unwind ?
Alexander
от задачи зависит
V
ребят может подскажет ктото если база забекаплена через —archive —gzip то ее можно востановить в другую (сменить имя) ?
Constantin
Constantin
--gzip можно и без --archive применять, если что
V
Бэкапить не в --archive
да тут дело что mongo в купере вот и использовал archive чтобы можно было легко востановить , а если без archive то большие трудности появляются с востановлением . на локальной машине нет mongorestore команды а вот как через всякие mongodb atlas или robo 3t я не нашел
Denys
всем привет) подскажите плз, скачал один пример и надо запустить монго и мне надо указать путь через -- dbpath. а как мне сам путь узнать, монго я один раз устанавлил уже
Pavel
Всем привет, мб кто знает, есть ли ограничение на колл-во памяти(документов) в коллекции в mongoDb? А то для меня прям сегодня открытием стало что в одном документе можно хранить всего лишь 16мб... P.S. В интернете так и не узнал точно есть ли такое ограничение или нет...
Max
https://docs.mongodb.com/manual/reference/limits/
Max
про кол-во документов лимиты не встречал, но 16 мегабайт на документ - да, это есть такое.
Pavel
Ну вот я тоже не нашел не чего, а то просто мне нужно будет в коллекции очень, очень много хранить документов и я хз можно ли так организовать, ну скорее всего можно
Dmitriy
ребят, подскажите, пожалуйста, как лучше организовать поиск по всем полям вложенного объекта? Т.е. например есть документ { param: "value", name: { en: "...", ru: "...", de: "..." } } как лучше сделать поиск по полям объекта name? Понятно, что можно через or, но может есть варианты лучше?
yopp
на размер коллекции нет ограничений
yopp
есть ограничение на длинну индексируемого поля в 1024 байт или 8192 бит, так что максимальное количество документов которое можно вставить в коллекцию это что-то в духе 2^8192 или 10^2466 степени. Атомов во вселенной где-то 10^80
Pavel
А нельзя ли просто как то повысить планку 16 мб? не прибегая к GridFS?
yopp
нет, нельзя
Andrew
Повеселил
Pavel
а что вы храните?
Нужно будет хранить кучу сообщений, и так как в один документ все не влезет буду раскидывать все по так называемым ссылкам
Pavel
В одной коллекции будут хранится ссылки на объекты сообщений а в других сами сообщения
Pavel
ну вроде на первый взгляд почти тоже самое что я и хочу сделать, но попозже все равно поподробнее почитаю
Pavel
А хотя такая архитектура даже по лучше, спасибо)
A
Приветы. Парни, а кто подскажет, что не так. Дело происходит в aggregation фреймворке. На некоторой стадии пайплайна у меня пачка объектов вот такого вида: { _id: ObjectId(...), items: [ { externalId: ObjectId(...), ... } ] } Теперь я хочу в каждом объекте отфильтровать items так, чтобы в этом массиве остались только объекты, у которых externalId === _id. Добавляю в пайплайн такой вот стейдж: { $project: { _id: 1, items: { $filter: { input: '$items', cond: { $eq: ['$$this.externalId', '$_id'] } } } } } И на выходе стабильно получаю объекты с пустым массивом на месте items. На SO по теме нашёл только такого же страдальца без ответов: https://stackoverflow.com/questions/43043927/how-to-filter-mongodb-aggregate-based-on-root-id Есть мысли что я делаю не так?
yopp
db.foo.insert({ "_id" : "4", "ref" : "3", "items" : [ { "eid" : "1" }, { "eid" : "1" }, { "eid" : "1" }, { "eid" : "2" }, { "eid" : "3" }, { "eid" : "4" } ] }) db.foo.aggregate([ { $project: { items: { $filter: { input: "$items", cond: { $eq: [ "$$this.eid", "$_id" ] } } } } } ]) { "_id" : "4", "items" : [ { "eid" : "4" } ] }
A
Хм. Минуту
A
Таак. Думал проблема с тем, что у тебя строки, а у меня ObjectId, но нет.. Ладно, пошёл думать, где в пайплайне ошибка. Спасибо
yopp
94% что в $_id не оригинальный _id
yopp
например если раньше group есть
yopp
ну или опечатка в имени поля :)
A
Да не, просто данных километры, и я сильно не сразу сообразил, что на самом деле items лежит еще внутри другого массива
yopp
а, ну или так, да :)
A
Энивей, спасибо 🙂
M
Подскажите пож, как к этому добавить поле с тотал суммой $match: { type: 'in', sid: sid.key } Т.е. чтобы было totalSum: сумма от $match: { type: 'in', sid: sid.key } let sidPayments = Transaction.aggregate([ { $match: { type: 'in', sid: sid.key } }, { $group: { _id: '$user', sum : { $sum: "$amount" } } }, { $lookup: { from: "users", localField: "_id", foreignField: "_id", as: "user_info" } } ]);
M
Или так никак не сделать?
M
Хотелось бы одним запросом решить это
AstraSerg
Хотелось бы одним запросом решить это
Добрый вечер. Нужно добавить эти поля в group
AstraSerg
с сообтетствующим аккумулятором. Выбирайте какой вам подойдёт: https://docs.mongodb.com/manual/reference/operator/aggregation/#accumulators-group
M
Но на этой стоке я группирую по пользователям, и подсчитываю сколько один пользователь внёс И также мне нужно знать сколько total sum по sid на всех транзакциях
M
как отдельный запрос это выглядит так { $match: { type: 'in', sid: sid.key } }, { $group: { _id: '$sid', sum: { $sum: "$amount" } } }
M
Извиняюсь, но я не понял. Можете объяснить как это получится, если они группируются по _id: '$user' и сумма у них складывается из документов, у которых user один и тот же, а мне нужна сумма из всех юзеров с этим sid Я наверно туплю
M
Спасибо, жду : )
AstraSerg
Спасибо, жду : )
Почитайте пока по ссылке. Там всё просто и прозрение прийти должно :)
Max
Всем привет. Кто-нибудь сталкивался с такой проблемой бекапа в Ops Manager? https://stackoverflow.com/questions/38066250/initial-sync-not-proceed-on-ops-manager-v2-0
Max
уже волосы рву на голове)
Max
А еще в логах Exception while initial sync slice compiling. Current syncId: 5bce4793b6be4974edc94b6f - Found syncId: 5bce4793b6be4974edc94b6f - Current sync round: 1 - Found sync round: 1
AstraSerg
Спасибо, жду : )
Прозрение не наступило? :)
pasha
Ребята, привет! Подскажите пожалуйста, как объявить схему в Mongoose для матриц вида: [ [A, A], [A, A] ] Где A – объект, c весьма конкретной схемой: A = new mongoose.Schema({ type: String, value: Number }) Пробовал {..., matrix: [[A]]} – дает validation error
Nick
ofArrays:
Nick
https://mongoosejs.com/docs/schematypes.html
pasha
https://mongoosejs.com/docs/schematypes.html
спасибо за наводку
pasha
https://mongoosejs.com/docs/schematypes.html
Да, [[]] работает. А есть возможность как-то объявить саму схему вложенных объектов (в моем примере A)?
Nick
про это хз, с монгусом лишь игрался
Nick
можете просто сделать две вложенных схемы
Edouard
Привет, чат. Пробую поверить наличие товара на конретном складе. В логе наблюдаю следующее 2018-10-20T00:00:06.458+0000 I COMMAND [conn1250670] command flowerData.presents command: find { find: "buquett", filter: { $and: [ { hidden: { $ne: true } }, { unique_buquett.priority: { $ne: "5" } }, { flower_slug: "lilia" }, { buquett_slug: "Italy" } ----stripped ---- Database: { acquireCount: { r: 24 } }, Collection: { acquireCount: { r: 24 } } } protocol:op_query 212ms Полностью здесь https://pastebin.com/GtgsV9Vi Не получается составить запрос из cli: db.flowerData.find ({}), трансформировать запись лога в запрос, этот диалект sql не очень знаком, док читал, не справился с вложенностью( mongo 3.2
SvPupok
ну здесь совсем не sql) секция filter описывает Ваш запрос, секция projection говорит о списке ключей, которые выводятся запросом, limit устанавливает ограничение вывода в 1500 документов.
Іван 🤙
Ребят, подскажите плиз, есть коллекция users, я её использую как FSM и постоянно дёргаю и проверяю статус пользователя на каждом шаге. мне еще нужно где то хранить сообщения , которые приходят на каждого юзера с одной стороны вроде склоняюсь к созданию другой коллекции, но с другой , сообщений не будет очень много и можно их хранить вместе с юзером в одном доккументе Подскажите плиз, как повлияет на скорость отклика, если я буду держать в юзерах еще одно поле в котором будет список из словарей(каждый словарь == сообщение) или лучше разносить их в разные коллекции? Спасибочки)
Іван 🤙
Добрый день. Если сообщений не много будет, то сохраняйте в той же коллекции. Сэкономите на запросе или лукапе. Учтите, что максимальный размер документа — 16 мегабайт
а как быть с тем, что я одну коллекцию (юзерс) дёргаю на каждом шаге, а сообщения мне понадобятся в 40%случаях? не будит ли вес сообщений тормозить быстродействие при отдаче юзерстейта?
AstraSerg
Зависит от реализации. Для экономии памяти просто не включайте ненужные данные в конечный резалтсет. Еще обязательно сделайте индексы.
Іван 🤙
Зависит от реализации. Для экономии памяти просто не включайте ненужные данные в конечный резалтсет. Еще обязательно сделайте индексы.
Немного не понял) Можно настроить что конкретно отдавать в том или ином случае из одного документа???
Nick
а как быть с тем, что я одну коллекцию (юзерс) дёргаю на каждом шаге, а сообщения мне понадобятся в 40%случаях? не будит ли вес сообщений тормозить быстродействие при отдаче юзерстейта?
для начала настройте мониторинг на те места где вам важна скорость. Когда соберете данных и поймете поймете что действительно есть проблемы с производительностью тогда начнайте оптимизировать, а пока не известно есть ли смысл вообще усложнять, может проект не взлетит
Nick
и да если у вас бизнес логика требует на каждый чих лезть в бд - ну что ж поделать, есть ряд подходов которые могут снизить нагрузку, но они же снизят надежность добавив сложности
yopp
Лучше начинать с отдельной коллекции.
yopp
Хранить в документе это уже оптимизация. Потом 16мб это не так много и случайно получить сломанного юзера это так себе