yopp
yopp
Но если очень хочется, то $map и руками замапить
yopp
$unwind это очень дорогая операция
Murena
Подскажите - при применении mongo full text search , можно дополнительное поле для поиска указывать - это не будет проблемой ?
по типу db.contact.find({ customFiels: 'task1', $text: {$search: "Соболев"}})
не смог нагуглить ответ на этот вопрос.
yopp
yopp
А зачем вам text индекс?
Semeon
@dd_bb это спам. Стикеры ведут на канал со ставками или типа того
Alexey
@dd_bb спасибо! Выравнивание версий помогло. Но у меня еще вопрос) Я подозреваю, что рестор прервался на 96-97% и теперь в двух коллекциях не хватает индексов, а целостность данных под вопросом. Как лучше поступить: создать индексы вручную и вручную дозалить данные или просто дропнуть эти бд и восстановить их заново? Как проверить целостность коллекции fs.chunks я даже не знаю, но перезалив такого объема займет много времени. Подскажите пожалуйста))
yopp
Дропнуть и влитть заново самый надежный способ
Alexey
S
Всем доброго времени суток, господа У меня к вам вопрос, Мне дали Задание сравнить две базы данных sql и mongodb, на примере запросов, плохо понимаю 1 и 2 базу, где мне можно найти конкретный пример сравнения?
S
Заранее благодарю
Vened
Сравнить по каким критериям? Пока вопрос звучит, как "Сравнить пластилин с пенопластом"
Nick
S
Учебное
Nick
Учебное
тогда для вас отличие только в том что mysql это sql, а монга - nosql, по ним уже гуглите куча информации
сверху присыпте что монга из коробки масштабируется, у мускуля хз как сейчас с этим
Vened
Nick
все остальное сравнивать бессмысленно, т.к. в мускуле куча движков, котоыре каждый под свою задачу
Nick
упс)\
Nick
тогда все еще банальнее
Vened
Учебное
И всё же, разверните ваш вопрос. О каком сравнении речь? Вам надо примеры запросов? Или что-то ещё?
Nick
хотя там наверное MS SQL имелся ввиду
S
Да я сравнил их в теории, и вот мне нужно именно примеры запросов.
Nick
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
Dmitriy
Дамир
Потому что не было смысла смотреть вторую сторону. Если стороны одинаковые )
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
yopp
для продуктов эффективнее использовать Attribute Type паттерн
products:
{
_id: ...,
<common_fields>,
attrs: [
{type: ObjectId(...), value: "foo"},
{type: ObjectId(...), value: "bar"},
{type: ObjectId(...), value: 53},
]
}
attribute_types:
{
_id: ObjectId(...),
value_type: "String",
name: "Color"
}
^
Дамир
yopp
Дамир
Дамир
yopp
Не совсем
the_process
could i write here in english ???
the_process
Murena
Т.е.
words:
{ _id: ObjectId|Int64, word: String, lemma: ObjectId|Int64 }
books:
{
title: Stirng,
<other_metadata>
}
books_words:
{
book_id: ObjectId,
page_id: Integer,
words: [{word_id: , offset: Integer}]
}
words_books:
{
word_id: ,
book_id: ObjectId,
pages: [ObjectId]
}
Или
{
word_id:
book_id:
page_id:
offsets: [Integer],
}
Или
{
word_id:
book_id:
pages: [{
page_id: ObjectId,
offsets: [Integer, ...]
}]
}
хотел уточнить words:
{ _id: ObjectId|Int64, word: String, lemma: ObjectId|Int64 }
это отдельная схема верно ?
yopp
Да
Murena
Да
нормально будет если у меня в целом слов может быть в какой то момент 100 миллионов(документов), для одной схемы не будет проблем чтоб потом выборку find() по слову делать ?
Murena
по производительности имею ввиду
yopp
Зависит от выборки. Если по индексу и по полному совпадению, то при условии что индекс и набор популярных документов в памяти то не будет
yopp
Но в целом, сначала надо ложи б до момента когда у вас будет такой объём данных. Угадать во что вы упретесь невозможно :)
yopp
Предложенная мной схема позволяет избежать очевидных проблем и оптимизировать под какие-то, на мой взгляд, стандартных кейсы для подобных задач
yopp
Но я не знаю вашего продукта, а дьявол в деталях
yopp
Моя рекомендация: fail fast. Запилите что работает, сделайте чтоб работало правильно и смотрите как система себя ведёт под продуктивной нагрузкой
yopp
98% продуктов до проблем с масштабированием просто не доживают
Murena
Зависит от выборки. Если по индексу и по полному совпадению, то при условии что индекс и набор популярных документов в памяти то не будет
у меня просто была идея не для каждого слова делать отдельный документ в схеме, а все таки делать под уникальное слово один документ а в нем массив в котором слова и доп данные к каждому слову (где оно в какой книге и тп)
но я так попробовал сделать и после одного миллиона слов когда добавил уперся что определенные документы превышают 16мб - то есть какоето из слов в книгах очень часто повторяется и документ с этим словом становится супер большой. И я вот думаю может делать групы документов для одного уникального слова ( то есть если какой то документ под одно слово уже больше 16мб то создавать дополнительный под него и тд) Чтоб не делать под каждое неуникальное слово отдельный документ в схеме бд и не создавать супер большие схемы с миллионами документов
Murena
в общем задача интересная - буду пробовать разные подходы и замерять производительность.
Murena
)))
yopp
yopp
Мне кажется можно оставить только одну сторону отношений
yopp
Т.е хранить в книгах список слов, на одну страницу один документ
yopp
И по массиву слов сделать индекс. Тогда найти все книги и страницы со словами будет тривиально
yopp
Но тут опять-же могут быть нюансы связанные с выборками
yopp
yopp
можно даже меньше
yopp
мегабайт 100
Алмаз
Добрый день!
Целую вечность использовал Rockmongo. Раньше разработку делал на PHP, сейчас уже как 3 года перешел на nodejs. И ради Rockmongo не хочется на стороне сервера держать apache+php. И хотел узнать есть какие то серверные решения аля rockmongo, но на node доступные через веб интерфейс?