yopp
Но если очень хочется, то $map и руками замапить
yopp
$unwind это очень дорогая операция
Murena
Подскажите - при применении mongo full text search , можно дополнительное поле для поиска указывать - это не будет проблемой ? по типу db.contact.find({ customFiels: 'task1', $text: {$search: "Соболев"}}) не смог нагуглить ответ на этот вопрос.
yopp
А зачем вам text индекс?
Semeon
@dd_bb это спам. Стикеры ведут на канал со ставками или типа того
Alexey
@dd_bb спасибо! Выравнивание версий помогло. Но у меня еще вопрос) Я подозреваю, что рестор прервался на 96-97% и теперь в двух коллекциях не хватает индексов, а целостность данных под вопросом. Как лучше поступить: создать индексы вручную и вручную дозалить данные или просто дропнуть эти бд и восстановить их заново? Как проверить целостность коллекции fs.chunks я даже не знаю, но перезалив такого объема займет много времени. Подскажите пожалуйста))
yopp
Дропнуть и влитть заново самый надежный способ
S
Всем доброго времени суток, господа У меня к вам вопрос, Мне дали Задание сравнить две базы данных sql и mongodb, на примере запросов, плохо понимаю 1 и 2 базу, где мне можно найти конкретный пример сравнения?
S
Заранее благодарю
Vened
Сравнить по каким критериям? Пока вопрос звучит, как "Сравнить пластилин с пенопластом"
S
Учебное
Nick
Учебное
тогда для вас отличие только в том что mysql это sql, а монга - nosql, по ним уже гуглите куча информации сверху присыпте что монга из коробки масштабируется, у мускуля хз как сейчас с этим
Nick
все остальное сравнивать бессмысленно, т.к. в мускуле куча движков, котоыре каждый под свою задачу
Nick
упс)\
Nick
тогда все еще банальнее
Vened
Учебное
И всё же, разверните ваш вопрос. О каком сравнении речь? Вам надо примеры запросов? Или что-то ещё?
Nick
хотя там наверное MS SQL имелся ввиду
S
Да я сравнил их в теории, и вот мне нужно именно примеры запросов.
Vened
ms sql запросить все данные из таблицы Sample базы AnyDB: select * from AnyDB.dbo.Sample
Nick
прям с комментариями
Vened
примерно то же самое в mongodb: db.Sample.find();
Vened
Остальное Nick вам любезно подсказал
S
Спасибо огромное щас буду разбираться 🙏 🙏 🙏
Null
В официальном блоге MongoDB был опубликован последний пост из серии «Building with Patterns», с кратким обзором всех рассмотренных паттернов дизайна документов. Если вы хотите узнать какие паттерны в каких случаях применять, это хорошая отправная точка https://www.mongodb.com/blog/post/building-with-patterns-a-summary
Дамир
Всем привет. Ребят, кто может помочь с запросом? В общем, есть каталог в нем есть фильтр товаров. Где можно выбрать его 3 параметра жесткости. [A, B, C] А так же выбрать, с обеех сторон должен быть жестким или только с одной. Сами записи хранятся примерно в таком виде: { "_id" : ObjectId("5b13113536d7c823729f7bf8"), "title" : "Item 1", "params" : { "hardness" : "A", "hardnessBot" : "B", } } Если выбрана разная жесткость, то эт легко сделать запрос: collection.find({ params.hardness: {$in: ["A", "B"]} params.hardnessBot: {$in: ["B"]} }) А вот если нужно, чтобы при выборе, жесткость должна быть одинаковой. Т.е. по разные стороны они должны быть равны. То как лучше написать запрос? Ссылка на песочницу: https://play.db-ai.co/m/XgMgC3FumAAB8Kvu Грубо говоря мне нужен подобный запрос: "params": { "$elemMatch": { "hardness": { "$in": ["A", "C"] }, "hardnessBot": { "$in": ["A", "C"] } } } Хотя мне кажется такой запрос не реально написать. :(
Dmitriy
Всем привет. Ребят, кто может помочь с запросом? В общем, есть каталог в нем есть фильтр товаров. Где можно выбрать его 3 параметра жесткости. [A, B, C] А так же выбрать, с обеех сторон должен быть жестким или только с одной. Сами записи хранятся примерно в таком виде: { "_id" : ObjectId("5b13113536d7c823729f7bf8"), "title" : "Item 1", "params" : { "hardness" : "A", "hardnessBot" : "B", } } Если выбрана разная жесткость, то эт легко сделать запрос: collection.find({ params.hardness: {$in: ["A", "B"]} params.hardnessBot: {$in: ["B"]} }) А вот если нужно, чтобы при выборе, жесткость должна быть одинаковой. Т.е. по разные стороны они должны быть равны. То как лучше написать запрос? Ссылка на песочницу: https://play.db-ai.co/m/XgMgC3FumAAB8Kvu Грубо говоря мне нужен подобный запрос: "params": { "$elemMatch": { "hardness": { "$in": ["A", "C"] }, "hardnessBot": { "$in": ["A", "C"] } } } Хотя мне кажется такой запрос не реально написать. :(
если я правильно понял вашу задачу, то что-то в этом духе? https://play.db-ai.co/m/XgMjns6DoQAB56Pa
Дамир
если я правильно понял вашу задачу, то что-то в этом духе? https://play.db-ai.co/m/XgMjns6DoQAB56Pa
Интересно, я правда могу подобное сгенерировать. Я че то про решение в лоб и не подумал... Просто вдруг если позиций выбора будет под 100 )) Сгенерируется очень длинный запрос.. А так спасибо большое, я понял идею! С наступающим Дмитрий.
Dmitriy
Интересно, я правда могу подобное сгенерировать. Я че то про решение в лоб и не подумал... Просто вдруг если позиций выбора будет под 100 )) Сгенерируется очень длинный запрос.. А так спасибо большое, я понял идею! С наступающим Дмитрий.
не за что) я бы на вашем месте пока не придумывал себе проблему с запросом по списку из 100 элементов (хотя не вижу в нем проблем), когда будет реальная проблема посмотрите план запросов и решите как оптимизировать
Дамир
не за что) я бы на вашем месте пока не придумывал себе проблему с запросом по списку из 100 элементов (хотя не вижу в нем проблем), когда будет реальная проблема посмотрите план запросов и решите как оптимизировать
я если честно хотел уже по другому сделать. Создать миграцию, пройтис по всем полям и добавить новоей свойство, например diff По которому можно было бы отфильтровывать просто diff: false, params.hardness: {$in: ["A", "B"]} А если true, то просто params.hardness: {$in: ["A", "B"]} params.hardnessBot: {$in: ["B"]}
Дамир
Потому что не было смысла смотреть вторую сторону. Если стороны одинаковые )
Dmitriy
ваш вариант тоже рабочий, но если мы все же пытаемся на будущее ориентироваться, то что будет если нужна будет еще выборка с одинаковой высотой? а если еще и плотность вдруг понадобится одинаковая? а в базе миллиард записей и миграция каждый раз занимает довольно продолжительное время
Дамир
Тоже верно. Тогда я не вижу более универсального решения, чем ваше. :(
Дамир
@sidmal Дмитрий, еще хотел бы у вас совета спросить. Есть у айтемов цена и поле скидки в процентах. Например стоит товар 100 рублей, а скидка 10% Дак вот , когда делаю выборку цены в монгу, на пример ищу товары от 0 до 90, то я товар выше не найду. Так как не знаю как при выборке учесть процент. Лучше завести дополнительное поле уже с конечным результатом скидки? Или можно как то запрос сделать с учет процентов скидки на товар? Просто у каждого товара своя скидка. И может вообще ее не быть.
Dmitriy
И может вообще ее не быть. при этом поля со скидкой в документе нет совсем или оно равно 0?
Dmitriy
если товаров не много, то я бы завел поле цена с учетом скидки и проапдейтил товары, ну и соответственно из приложения вставлял бы уже данные в это поле. тогда выборка получится проще, если данных много то это решается через aggregate, можно отдельным стейджем сделать $project с предрасчитанным полем цена с учетом скидки. но в этом варианте проблема что $match по сформированному поля будет fullscan-ом уже отрабатывать.
Dmitriy
т.о. я бы на вашем месте выбрал бы вариант с новым полем, оно даст больше профита и меньше гемороя)))
Дамир
Не хочу даже вникать в первый вариант... 😅 Но все равно спасибо ОГРОМНОЕ! Буду заводить поле ))
yopp
Всем привет. Ребят, кто может помочь с запросом? В общем, есть каталог в нем есть фильтр товаров. Где можно выбрать его 3 параметра жесткости. [A, B, C] А так же выбрать, с обеех сторон должен быть жестким или только с одной. Сами записи хранятся примерно в таком виде: { "_id" : ObjectId("5b13113536d7c823729f7bf8"), "title" : "Item 1", "params" : { "hardness" : "A", "hardnessBot" : "B", } } Если выбрана разная жесткость, то эт легко сделать запрос: collection.find({ params.hardness: {$in: ["A", "B"]} params.hardnessBot: {$in: ["B"]} }) А вот если нужно, чтобы при выборе, жесткость должна быть одинаковой. Т.е. по разные стороны они должны быть равны. То как лучше написать запрос? Ссылка на песочницу: https://play.db-ai.co/m/XgMgC3FumAAB8Kvu Грубо говоря мне нужен подобный запрос: "params": { "$elemMatch": { "hardness": { "$in": ["A", "C"] }, "hardnessBot": { "$in": ["A", "C"] } } } Хотя мне кажется такой запрос не реально написать. :(
Для магазинов с произвольными параметрами value attribute паттерн в виде поддокументов будет эффективнее
Дамир
Храните цену со скидкой
По этому поводу, да спасибо.
yopp
По этому поводу, да спасибо.
https://www.mongodb.com/blog/post/building-with-patterns-the-attribute-pattern
Дамир
https://t.me/MongoDBRussian/64534
эт типа связь 1 ко многим?
Дамир
https://www.mongodb.com/blog/post/building-with-patterns-the-attribute-pattern
опа, я эту же статью нагуглил ))
yopp
Не совсем
Дамир
Не совсем
Понял, почитаю, спасибо!
the_process
could i write here in english ???
yopp
could i write here in english ???
We have English speaking group: @mongo_db
yopp
Да
Murena
Да
нормально будет если у меня в целом слов может быть в какой то момент 100 миллионов(документов), для одной схемы не будет проблем чтоб потом выборку find() по слову делать ?
Murena
по производительности имею ввиду
yopp
Зависит от выборки. Если по индексу и по полному совпадению, то при условии что индекс и набор популярных документов в памяти то не будет
yopp
Но в целом, сначала надо ложи б до момента когда у вас будет такой объём данных. Угадать во что вы упретесь невозможно :)
yopp
Предложенная мной схема позволяет избежать очевидных проблем и оптимизировать под какие-то, на мой взгляд, стандартных кейсы для подобных задач
yopp
Но я не знаю вашего продукта, а дьявол в деталях
yopp
Моя рекомендация: fail fast. Запилите что работает, сделайте чтоб работало правильно и смотрите как система себя ведёт под продуктивной нагрузкой
yopp
98% продуктов до проблем с масштабированием просто не доживают
Murena
Зависит от выборки. Если по индексу и по полному совпадению, то при условии что индекс и набор популярных документов в памяти то не будет
у меня просто была идея не для каждого слова делать отдельный документ в схеме, а все таки делать под уникальное слово один документ а в нем массив в котором слова и доп данные к каждому слову (где оно в какой книге и тп) но я так попробовал сделать и после одного миллиона слов когда добавил уперся что определенные документы превышают 16мб - то есть какоето из слов в книгах очень часто повторяется и документ с этим словом становится супер большой. И я вот думаю может делать групы документов для одного уникального слова ( то есть если какой то документ под одно слово уже больше 16мб то создавать дополнительный под него и тд) Чтоб не делать под каждое неуникальное слово отдельный документ в схеме бд и не создавать супер большие схемы с миллионами документов
Murena
в общем задача интересная - буду пробовать разные подходы и замерять производительность.
Murena
)))
yopp
у меня просто была идея не для каждого слова делать отдельный документ в схеме, а все таки делать под уникальное слово один документ а в нем массив в котором слова и доп данные к каждому слову (где оно в какой книге и тп) но я так попробовал сделать и после одного миллиона слов когда добавил уперся что определенные документы превышают 16мб - то есть какоето из слов в книгах очень часто повторяется и документ с этим словом становится супер большой. И я вот думаю может делать групы документов для одного уникального слова ( то есть если какой то документ под одно слово уже больше 16мб то создавать дополнительный под него и тд) Чтоб не делать под каждое неуникальное слово отдельный документ в схеме бд и не создавать супер большие схемы с миллионами документов
что группировать все книги в одно слово будет вредом будет выгодной стратегией. Слишком большой набор слов
yopp
Мне кажется можно оставить только одну сторону отношений
yopp
Т.е хранить в книгах список слов, на одну страницу один документ
yopp
И по массиву слов сделать индекс. Тогда найти все книги и страницы со словами будет тривиально
yopp
Но тут опять-же могут быть нюансы связанные с выборками
yopp
можно даже меньше
yopp
мегабайт 100
Алмаз
Добрый день! Целую вечность использовал Rockmongo. Раньше разработку делал на PHP, сейчас уже как 3 года перешел на nodejs. И ради Rockmongo не хочется на стороне сервера держать apache+php. И хотел узнать есть какие то серверные решения аля rockmongo, но на node доступные через веб интерфейс?