@MongoDBRussian

Страница 210 из 342
Kirill
23.03.2018
09:15:51
Подскажите как удалить все данные из коллекции у которых в документе конкретное поле содержит тип данных - строку

Google
yopp
23.03.2018
09:18:41
Давно бы уже проверили

Игорь
23.03.2018
09:19:50
Я не помню чтоб у монги были проблемы с пересечением $text и остальных индексов
то есть если он в одном запросе сначала найдет по индексу $text то потом сможет использовать индекс по price что бы быстрее просмотерть коллекцию?

yopp
23.03.2018
09:21:18
то есть если он в одном запросе сначала найдет по индексу $text то потом сможет использовать индекс по price что бы быстрее просмотерть коллекцию?
Планировщик скорее всего выберет сначала отфильтровать по цене: потому что текстовый индекс безумно дорогой. Но я не уверен. Возьмите создайте коллекцию из трёх документов и посмотрите explain со статистикой выполнения.

Игорь
23.03.2018
09:21:30
ок

сейчас проверю

yopp
23.03.2018
09:21:50
Но в целом, монга умеет в пересечение индексов. Не обязательно делать compound

В некоторых случаях так вообще, лучше два индекса

Игорь
23.03.2018
09:26:26
В некоторых случаях так вообще, лучше два индекса
ну, собственно выиграл вариант сортировки по цене

"winningPlan" : { "stage" : "FETCH", "filter" : { "$and" : [ { "price" : { "$lte" : 2000 } }, { "price" : { "$gte" : 100 } } ] }, "inputStage" : { "stage" : "TEXT", "indexPrefix" : { }, "indexName" : "typePrefix_text_vendor_text_model_text", "parsedTextQuery" : { "terms" : [ ], "negatedTerms" : [ ], "phrases" : [ "" ], "negatedPhrases" : [ ] }, "textIndexVersion" : 3, "inputStage" : { "stage" : "TEXT_MATCH", "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "OR" } } } } }, "rejectedPlans" : [ ] }, "winningPlan" : { "stage" : "FETCH", "filter" : { "$and" : [ { "price" : { "$lte" : 2000 } }, { "price" : { "$gte" : 100 } } ] }, "inputStage" : { "stage" : "TEXT", "indexPrefix" : {

}, "indexName" : "typePrefix_text_vendor_text_model_text", "parsedTextQuery" : { "terms" : [ ], "negatedTerms" : [ ], "phrases" : [ "" ], "negatedPhrases" : [ ] }, "textIndexVersion" : 3, "inputStage" : { "stage" : "TEXT_MATCH", "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "OR" } } } } }, "rejectedPlans" : [ ] },

yopp
23.03.2018
09:27:17
Выиграла дружба: сначала поиск по TEXT, а потом пересечение его результатов с price. Включите статистику исполнения (executionStats: 1). И пожалуйста, длинные портянки складываете на gist.github.com

Игорь
23.03.2018
09:30:59
ок

Google
the garblovian
23.03.2018
11:12:03
привет, люди! второй раз восстанавливаю из backup'а БД, после исчезновения всех таблиц. Как можно объяснить проблему?

снаружи доступ к mongo запрещен, пароль сложный(

как проще всего проанализировать ситуацию?

yopp
23.03.2018
11:15:57
Логи посмотреть

the garblovian
23.03.2018
11:17:56
Логи посмотреть
а что погрепать?

drop?

yopp
23.03.2018
11:18:06
Да

the garblovian
23.03.2018
11:19:46
блин, есть дропы :( а как такое возможно?

yopp
23.03.2018
11:20:11
Смотрите по номеру сессии откуда логин

Возможно у вас какие-то проблемы с аутентификацией или с правами

the garblovian
23.03.2018
11:24:01
спасибо большое! буду harden'ить!

Dmitriy
23.03.2018
12:06:38
Планирую перейти с постгреса и джанговского идиотского ORM на монгу и mongoengine. Уверен что все будет отлично )

Yurii
23.03.2018
12:14:13
Планирую перейти с постгреса и джанговского идиотского ORM на монгу и mongoengine. Уверен что все будет отлично )
? тут есть нюансы, не спеши переходить, если хотя бы не прикинешь как будет выглядеть переход. На монги именно сейчас столкнешся с тем, что нет транзакций и надо некоторую информацию дублировать в разных коллекциях (если коллекций у тебя много и между ними есть связи), чтобы апдейт одного поля не вызывал апдейт кучи документов...

Игорь
23.03.2018
12:54:58
а если индекс весит больше 32 мб, то без лимита не сделать сортировку?

Игорь
23.03.2018
12:59:05
я делаю поиск по текстовому индексу и потом сотировку по $meta. индекс весит 42 мегабайта и он выдает ошибку: Sort operation used more than the maximum 33554432 bytes of RAM

Google
Nick
23.03.2018
13:00:50
и ужее ее не может отсортировать

Игорь
23.03.2018
13:03:23
ну да, я в принципе это понял. только вопрос в том, в как понять какое количество результатов возвращать. В разных полях, разное количество текста у разных документов и объемы могут быть разные. буду думать)

Nick
23.03.2018
13:05:19
не уверен точно, н оскорее всего эта пробелма решитсья выборкой по индексам с такой же сортировкой как вам требуется

Игорь
23.03.2018
13:06:46
я думаю, что поиск по этому полю вообще исключу из индекса пока, там реально могут быть огромные объемы инфы, а искать по нему будут очень не часто. это так, попытка добавить избыточный функционал заранее

Nick
23.03.2018
13:10:17
вообще ваша проблема упирается в ограничение https://docs.mongodb.com/manual/reference/limits/#Sort-Operations поэтому советую дополнительно ознакомиться со всеми ограничения монги, чтобы было меньше вопросов

Dmitry
23.03.2018
14:27:01
зайцы, а есть приблуда как django-factoryboy, но не для орма (mongoengine), а для прям коллекций (schema validation + indexes) монги? Фабрики генерить для юнит-тестов

Dmitry
23.03.2018
14:58:13
точно не понятно что т имеешь ввиду, но есть еще mimesis и faker
faker знаю, но он генерит данные (фейки) для полей, а мне нужно прям генерить документы (фабриками)

mimesis сейчас посмотрел и вижу что это аналог faker

Dmitriy
23.03.2018
14:59:21
faker знаю, но он генерит данные (фейки) для полей, а мне нужно прям генерить документы (фабриками)
faker умеет генерить словари, если мы о питоне. Но они не произвольные

Dmitry
23.03.2018
15:00:10
так даже если я сгенерю словарик с помощью него, этот словарик не уложится в валидацию моих коллекций

потому что фейкер о ней ничего не знает (и не должен)

спасибо энивей, подумаю в эту сторону

Dmitriy
23.03.2018
15:01:41
я тебя понял

нужно подумать как параметризовать

так даже если я сгенерю словарик с помощью него, этот словарик не уложится в валидацию моих коллекций
http://faker.readthedocs.io/en/master/providers/faker.providers.python.html Вот еще глянь. Но в любом случае, если нужно соответствовать жесткой валидации, скоре всего тебе что-то свое нужно пилить.

Игорь
23.03.2018
15:44:39
кто подскажет, в чем дело, все загуглил, не могу найти инфы { "ok" : 0, "errmsg" : "language override unsupported: rus", "code" : 17262, "codeName" : "Location17262" } при попытке создать индекс

Google
Игорь
23.03.2018
15:47:32
но откуда он это вообще берет? запрос db.collection.createIndex( {name: "text", typePrefix: "text", vendor: "text", model: "text" })

Nick
23.03.2018
15:49:47
дефолтный язык выставлен в rus

придется явно указывать при создании индекса походу язык

а ОС какая где запущено?

Игорь
23.03.2018
15:57:26
linux. пытаюсь createIndex( {name: "text", typePrefix: "text", vendor: "text", model: "text" }, {default_language: "russian"})

тоже самое

не создает

Старый
23.03.2018
16:37:54
linux. пытаюсь createIndex( {name: "text", typePrefix: "text", vendor: "text", model: "text" }, {default_language: "russian"})
linux это не ос, дистрибутв, версия, какие стоят локали в системе

.....

Игорь
23.03.2018
16:39:11
Mint и на второй машине redhut. Мне кажется дело не в этом, на других коллекциях все работает

Попалась одна, когда собирал данные и вывалилась эта ошибка

Старый
23.03.2018
16:40:00
а локаль русская установлена там

Игорь
23.03.2018
16:40:06
Да

Русская и английская

А монго за локалью обращается к системе при создании индекса?

Мне кажется нашёл решение, завтра проверю. Где-то в каком-то документе наверное есть поле language: rus

Hadevs
24.03.2018
06:01:41
Всем привет, вчера ночью столкнулся с проблемой. Думаю у многих такое было) Удалили data/db и запросили биткоины. Бекап спас, но как обезопасить себя в будущем?

Hadevs
24.03.2018
06:04:16
Можно подробнее?) Я сам не бекендщик

Viktor
24.03.2018
06:04:17
сделать виртуальную частную сеть между application сервером и бд

Google
Hadevs
24.03.2018
06:04:20
Линку какую-нибудь

Viktor
24.03.2018
06:04:59
https://docs.mongodb.com/manual/tutorial/enable-authentication/

Hadevs
24.03.2018
06:05:06
thank you

Viktor
24.03.2018
06:05:27
а по сетям это уже смотрите у своего облака как настраивается

Hadevs
24.03.2018
06:05:48
через iptables я прописал команды некоторые

То есть через mongodb Auth нет возможности удалить директорию data/db/?

если я его настрою

потому что по логам он тупо прописывает rm -r -f /data/db и рад

Viktor
24.03.2018
06:07:15
а, вот оно чо

ну так это не бд виновата, вам сервер ломанули

получили доступ по ssh

Hadevs
24.03.2018
06:07:48
Кайф, а где ты обычно хостишь?

https://dba.stackexchange.com/questions/160690/mongodb-ransom-attack-and-its-solution

такая проблема

Игорь
24.03.2018
12:34:59
Мне кажется нашёл решение, завтра проверю. Где-то в каком-то документе наверное есть поле language: rus
В общем да, проблема в этом. Если в документе есть поле language, то монго пытаеться сделать индекс с указанным там значением. На самом деле даже не знаю, как быть. В данном случае, я знаю где такое поле находиться и его значение. Но в дальнейшем, где оно будет в загружаемых документах и какие там будут значения...

Nick
24.03.2018
12:40:22
ну тут только один вариант, отправляться на их багтрекер и спрашивать там что делать

Игорь
24.03.2018
12:53:06
нашел решение! language_override работает. то есть нужно всегда выставлять, если есть вероятность, что в приходящих данных будет поле language. Оно задает поле поиска для задания языка в документе. В общем пишем туда невероятную белеберду, которая точно не буде в приходящих документах полем))

Страница 210 из 342