Andry
Используется ваш индекс для группировки
А почему столько так долго все равно?
Andry
и почему "executionStats" : { "executionSuccess" : true, "nReturned" : 4900000.0,
Andry
А данные из индекса никак не вычитать?
Nick
https://pastila.nl/?0017e270/933d68cf2e7598b8af07940687bd74a5#FuBAvQXocoVQOaWRYz6eMw==
собсна из индекса тоже данные надо вычитывать и тут как раз показало что планировщик верно оценил, что надо использовать простой индекс для $match и профита от покрывающего не будет. Объем выборки с учетом вашего железа видимо упирается в проц
Andry
Блин просто мне кажется на mysql у меня бы такой проблемы не было
Andry
как думаете - если я сделаю cqrs подниму перкона и через оплог буду синхронить туда
Andry
или это совсем бред?
Nick
или это совсем бред?
если достаточно опыта в mysql, чтобы его настроить под подобные задачи, то не бред. В общем это обычная olap задача, для которой монга не очень подходит, зато подходят любые другие и специально заточенные базы, тот кликхауз надо упомянуть (но тут начинаются приколы с админством зоопарка и наличием компетенций у разрабов)
Viktar
Я не думаю что вы сможете ускорить этот запрос
Viktar
как думаете - если я сделаю cqrs подниму перкона и через оплог буду синхронить туда
Колодочные БД по таким запросам будут работать быстрее
Andry
Percona Server for MongoDB вот хочу попробовать
Andry
может будет лучше? как думаете?
Andry
Или от этого профита не будет? Кто то пользовался может подсказать пожалуйста?
Constantine
может будет лучше? как думаете?
Чем лучше? А может хуже?
Andry
Чем лучше? А может хуже?
Ну да тоже верно
yopp
да маленький 254 мегабайта
250мб за 0.2мс это достаточно специфические требования. Это чистых данных 1.2ГБ/с, без учета оверхеда на хранение, фрагментацию в памяти и тд. Как выше предложили, вам скорее всего подойдут колончатые хранилища, например clickhouse. Не факт что в 200мс уложитесь, но с ними больше шансов, за счёт организации данных: значения одной колонки множеств записей лежат последовательно, что сильно улучшает локализацию данных при расчетах, что позволяет снизить трафик в память, плюс считать данные по нескольким колонкам параллельно на разных ядрах Если кх не хочется и вы сейчас в монге не io bound, то вы можете попробовать сгрупировать данные по какому-то признаку в один документ или посмотреть укладывается ли ваша схема в ограничения timeseries. Если укладывается, то можно их проверить. Это фактически колончатая структура хранения записей и в 8 монгу обещают завести ещё и агрегацию сразу по колонкам без промежуточной десериализации в документы
Andry
https://pastila.nl/?004c0566/f28966c4911d794dc740c3f411608f89#XJh33zScRJEGjG6+hjhwTw==
Andry
Подскажите пожалуйста - у меня такая структура документа - и мне надо вытянуть все embeded документы по Stock которые удовлетворяют условию
Andry
Мне как это сделать? elementMatch и прочее - возвращает мне весь документ
Andry
дальше аггрегацией чтоли выпиливать лишнее или в проекции?
Andry
db.getCollection("InventSum").find({ "Stock" :{ $elemMatch : { "InventDim.Location.ZoneId" : "Основной Склад"}}}).limit(10)
Andry
такого плана запрос в embeded все равно выдает все документы которые там есть
yopp
Мне как это сделать? elementMatch и прочее - возвращает мне весь документ
$elemMatch еще нужно добавить в проекцию, чтоб отфильтровать результат: https://www.mongodb.com/docs/manual/reference/operator/projection/elemMatch/
yopp
Т.е у вас их будет два: в условии и в проекции
Andry
Да я вроде так и сделал - чето не пойму где косячнул
Andry
Он мне в проекции выдает только первый элемент и все
Andry
а их там как бы 50
Andry
db.getCollection("InventSum").find({ "ProductId" :"10023825", "Stock" : { $elemMatch : { "InventDim.Location.ZoneId" : "Основной Склад"}}}, {"WarehouseId" : 1, "ProductId" : 1, "Stock" : { $elemMatch : { "InventDim.Location.ZoneId" : "Основной Склад"}} }).limit(10)
Andry
вот я так сделал
Andry
и он мне выдает только 1 и все - а их там 50 должно быть
Andry
{ "_id" : "66b864d47e647b5f49350726", "ProductId" : "10023825", "WarehouseId" : "S097", "Stock" : [ { "InventDim" : { "InventDimId" : "7adb3f117e67e11d7658d5e15c3c5664", "Location" : { "ZoneId" : "Основной Склад", "RackId" : "R0", "CellId" : "R0-C0", "ContainerId" : null }, "Profile" : { "StockType" : "Годный", "OwnerType" : null }, "Unique" : null }, "AvailPhysical" : NumberInt(5), "PhysicalInventory" : NumberInt(5), "Reserved" : NumberInt(0), "PhysicallyReserved" : NumberInt(0), "Ordered" : NumberInt(0), "ReservedInOrdered" : NumberInt(0) } ] }
Andry
такой ответ - хотя в самом документе с Основной Склад еще 50 записей как минимум
Andry
Andry
db.getCollection("InventSum").aggregate([ { $match : { "WarehouseId" :"S097", "ProductId" :"10023825", "Stock" : { $elemMatch : { "InventDim.Location.ZoneId" : "Основной Склад"}}}}, { $unwind: '$Stock' }, { $match : { "WarehouseId" :"S097", "ProductId" :"10023825", "Stock.InventDim.Location.ZoneId" : "Основной Склад"}}, ])
Andry
Я вот в такое переделал - но мне не очень как то нравится если честно
yopp
Обычно это существенно быстрее чем $unwind
Andry
Обычно это существенно быстрее чем $unwind
спасибо сейчас посмотрю как это сделать
access_denied
Уважаемые, использую вложенные схемы и поле userId объявлено уникальным, но по факту могу создать сколько угодно записей с одинаковым userId. Есть ли какая нибудь возможность не делая ручную проверку через if добиться уникальности?
access_denied
Arams
Поле email не видно тут
access_denied
Поле email не видно тут
сорри, там userId, ну смысл тот же
Andry
Подскажите пожалуйста - есть вот такая структура
Andry
https://pastila.nl/?01bf7ddc/c9b2be93324c857fa6b2e8f6ad6f4ea0#QdW3zFTFnyphJ4Ez+6X0eg==
Andry
https://pastila.nl/?01f3d368/7b9c73b1c1ce3e87d26c52fe4e5b3863#+lX3ZzeSWSP6gxvAMOngvw==
Andry
я вот пишу вот такой запрос на обновление
Andry
на вставку работает как надо - а вот на обновление мне надо просто поля проинкрементить
Andry
AvailPhysical к примеру
Andry
не могу понять как в then написать
Andry
"$$this там недоступен
Andry
через map нужно делать?
Tetra
через map нужно делать?
Да, по другому залезть сложно будет
Andry
щас попытаюсь раскурить спасибо
Andry
А я чето не могу понять подскажите....
Andry
{ "$map": { "input": "$members", "in": { "$cond": [ { "$eq": [{ "$ifNull": ["$$this.score", 0 ] }, 0] }, { "$mergeObjects": ["$$this", { "score": 1 } ] }, { "$mergeObjects": ["$$this", { "score": { "$sum": ["$$this.score", 1] } } ] } ] } } }
Andry
вот у меня мап ... а мне надо только в том элементе обновить а в других как бы ненадо - как мне это пропустить?
Andry
Вроде сделал...
Andry
теперь вопрос один - как мне это в с# перенести ахахах
Nick
теперь вопрос один - как мне это в с# перенести ахахах
вот как бы стандартная проблема вот таких структур и желания обновлять внутри нее одним запросом
Andry
а подскажите как мне { "$mergeObjects": ["$$this", { "AvailPhysical" : NumberInt(200) } ] } тут наинкрементить изи за декрементить к текущему значению?
Andry
{ "$mergeObjects": ["$$this", { "AvailPhysical" : { "$add" : ['$AvailPhysical', NumberInt(100) ] } } ] }
Andry
я вот так попробовал но явно что то не так
Andry
Подскажите что то не пойму
Andry
"then": { "$map": { "input": "$Stock", "in": { "$cond": [ { "$eq": [ { "$ifNull": [ "$$this.InventDim.InventDimId", "a8ba61c61a634a5db4d2d8d53e9a9100" ] }, 0] }, { "$mergeObjects": [ "$$this", { } ] }, { "$mergeObjects": [ "$$this", { "AvailPhysical" : { "$add" : [ "$AvailPhysical", NumberInt(100) ] } } ] } ] } } },
Andry
AvailPhysical надо добавить 100, просто устновить значение мне не подойдет
М.А
Ребята привет У меня в монге есть строковое поле которое хранит числа (в виде строки) Когда делаю сотрировку по этому полю, она сотрирует как числа а не в алфавитном порядке Монга сама делает какую то конвертацию на фоне ?
Nick
а что не так?
М.А
а что не так?
Всё вроде так... Значит монга может сортировать как числа ?
М.А
Хотя это же строки, у них уникод по моему Который совпадает с сортировкой по числам
Nick
Всё вроде так... Значит монга может сортировать как числа ?
если добавите например стикер "100000", то вот он вылезет во втором случае в начале перед "20000"
М.А
Принял спасибо Попробую Кажется буду юзать функции перевода на числа т,к мне нужна точная сортировка по числам всегда
М.А
Значит кажется мне просто повезло иметь именно такие строковые числа Которые выглядят как сортировка чисел
IDONTSUDO
У moongose документа есть два вида работы. 1. Когда он яляется синглтоном колекции. 2. Когда он является инстанцом колеции. Как мне указать в типах TypeScript что в класс можно передать только синглтон колекции?
Igor
Подскажит веб-админку для монги под Python, ну или чтобы можно было питонисту разобраться без проблем
Я знаю что самое главное вовремя но тоже недавно веб-админку для монги под Python ну и мне старлет-админ зашла с одмитик. Единственный минус там все в модели надо перевести, и мне гибкости не хватило или умения прям все в моделях описать, пришлось еще свою вьюху делать.