🍗
Здравствуйте. Трабла такая. $bulk->update( ['_id' => 2], ['$set' => ['accountBag.CashInventory.items.1' => ['count'=>'213']]], ['multi' => false, 'upsert' => false] ); Запрос на изменение параметра count, а вместо этого удаляется всё что есть в массиве items и вставляется count 213.
Nick
а нужно обновить значение у элемента с индексом 1?
Nick
['accountBag.CashInventory.items.1.count' => '213']
Nick
чтото такое попробуйте
Ilya
https://docs.mongodb.com/ доступен сейчас у кого ?
Ilya
хм
Andrew
Здравствуйте, есть ли способ вылечить вот это ==== "errmsg" : "exception: no NamespaceDetails for index: { v: 1, key: { _id: 1 }, name: \"_id_\", ns: \"viewsStatistics. statistics_reduced_1\" }", "code" : 17329, === ? кроме как бэкапа того, что можно забэкапить и восстановления версия 2.6.12
🍗
🍗
я не знаю, может я не правильно указываю, но по другому не получается)
Nick
у вас items не массив
Nick
значит нужно просто указать путь
🍗
у вас items не массив
Тогда как правильно будет указать, массив в объект переводить ?
Nick
у вас уже не массив, либо данные попорчены ваши запросом, либо изначально не было массивом
Nick
приведите в изначальный вид
🍗
Получается так, вроде сработало, не удалило ничго. ['$set' => ['accountBag.CashInventory.items.1.count' => '213']],
🍗
очень трудно после SQL под монго сделать скрипт, всё кажется таким нелогичным)))
🍗
в любом случае спасибо за помощь, вроде получилось)
Nick
может тогда отказатсья от монго?
🍗
я бы с радостью, но там целый сервер под монго, мне только веб чатсь надо сделать)
Nick
а пробелма выше скорее всего связана с тем, что после числа 1 ожидалось поле, а так монга расценила 1 как название поля и изменила тип с массива на объект, удалив все старое и создав новое поле 1.
Nick
интересно это нормальное поведение или нет, никто не вкурсе?
🍗
Там да, проблема что ожидался объект, пришел массив, по всей видимости монго решает всё перезаписать на массив, когда я отправил объект всё как по маслу удачно)
🍗
так пробую, вродне всё равно объектом он и остается быть. ['$set' => ['accountBag.CashInventory'=> array('items'=> ['1'=> ['count'=>123]])]],
🍗
🍗
Как сделать массивом?
Nick
Не знаю синтаксиса, так что не поскажу, читайте доки к вашему драйверу
🍗
Это же PHP, его все знают, по крайней мере мне так казалось)
Nick
Если жизнь заставит, то да, но добровольно лезть в нем разбираться эт без меня
Игорь
А подскажите ещё такой момент, ищу информацию, но однозначно не могу найти. Если создать комплексный текстовый индекс, влияет ли в нем очерёдность полей?
Nick
не влияет
Игорь
но он один на коллекцию может быть
Игорь
я так понимаю, там немного свой алгоритм
Игорь
отюсда такой впорос вытекает. Если я ищу документы по тектововму индексу и потом их найденых, взять только те, что в ценовом диапозоне или по другому числовому полю в документе. в обычном случае можно было бы создать два индекса на два запроса. но как быть с текстовым? создам комплексный текстовый индекс и добавлю в конец индекс по полю цена, то я не смогу сделать еще один с другим полем вконце
Nick
видите, вам не подходит монга под ваши задачи
Nick
по крайней мере с текущей структурой документов
Игорь
ну это на самом деле подзадачи большой задачи, там много чего, для чего монго очень подходит сама по себе. вопрос в том, что только поиск по документам для конкретного варианта подзадачи может быть не таким молниеносным, как хотелось бы. Но в целом не должно быть коллецкий больше 3 500 000 документов, а по ним более или менее адекватно даже без индекса искать. Всегда хочеться оптимизировать и ускорить, но бывают такие затыкания. Если вязть за место монги другой движок, то в других местах может больше проблем появиться в целом в проекте
Zloy-Dobry
Вам точно не к монге, имхо
Игорь
А что например?
Nick
я бы сказал как бычно youpp говорит, сначала сделайте чтоб работало, а потом задумывайтесь о скорости. а то может выяситсья что реально часть задач физически невозможно выполнить на монге, либо это делается через использование хрупих костылей и усложнения логики
Игорь
мне очень подходит документоорентированная база и мне кажеться монго сейчас лучшая. Во всяком случае, все статьи сравнения говорят в ее пользу. ElasticSearch все таки не полноценное документоорентированное хранилище
Zloy-Dobry
Постгрес умеет в докумен
Игорь
насколько лучше полнотекстовый поиск постгреса по json полю документа? мне разбирать и собирать документы совсем не нужно, прям вот никак. поэтому докуметная база. в постгресе есть поле json, но искать по нему в том же варианте, что я делаю сейчас врядли будет как-то сильно лучше
Игорь
не поймите не правильно, я очень люблю постгрес и это великолепная база. Но разные задачи, разные инструменты. Хорошо бы найти серебренную пулю на все и сразу, но пока такой нет(
Игорь
у меня был опыт, где для работы с документами по факту, импользовалась sql база. постоянные сборки и разборки, для записи и чтения. логика ужасно загромождена, хранение данных не очевидно для понимания и прочее. а когда добавляються или убираются поля в приходящих данных... в общем не комильфо совсем
K
Подскажите как удалить все данные из коллекции у которых в документе конкретное поле содержит тип данных - строку
yopp
Вы делает отдельный индекс для $text и отдельный индекс по цене.
yopp
Давно бы уже проверили
Игорь
Я не помню чтоб у монги были проблемы с пересечением $text и остальных индексов
то есть если он в одном запросе сначала найдет по индексу $text то потом сможет использовать индекс по price что бы быстрее просмотерть коллекцию?
yopp
то есть если он в одном запросе сначала найдет по индексу $text то потом сможет использовать индекс по price что бы быстрее просмотерть коллекцию?
Планировщик скорее всего выберет сначала отфильтровать по цене: потому что текстовый индекс безумно дорогой. Но я не уверен. Возьмите создайте коллекцию из трёх документов и посмотрите explain со статистикой выполнения.
Игорь
ок
Игорь
сейчас проверю
yopp
Но в целом, монга умеет в пересечение индексов. Не обязательно делать compound
yopp
В некоторых случаях так вообще, лучше два индекса
Игорь
В некоторых случаях так вообще, лучше два индекса
ну, собственно выиграл вариант сортировки по цене
Игорь
"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
Выиграла дружба: сначала поиск по TEXT, а потом пересечение его результатов с price. Включите статистику исполнения (executionStats: 1). И пожалуйста, длинные портянки складываете на gist.github.com
Игорь
ок
Gаrblоvian
привет, люди! второй раз восстанавливаю из backup'а БД, после исчезновения всех таблиц. Как можно объяснить проблему?
Gаrblоvian
снаружи доступ к mongo запрещен, пароль сложный(
Gаrblоvian
как проще всего проанализировать ситуацию?
yopp
Логи посмотреть
Gаrblоvian
Логи посмотреть
а что погрепать?
Gаrblоvian
drop?
yopp
Да
Gаrblоvian
блин, есть дропы :( а как такое возможно?
yopp
Смотрите по номеру сессии откуда логин
yopp
Возможно у вас какие-то проблемы с аутентификацией или с правами
Gаrblоvian
спасибо большое! буду harden'ить!
Мечтатель
Планирую перейти с постгреса и джанговского идиотского ORM на монгу и mongoengine. Уверен что все будет отлично )
Yurii
Планирую перейти с постгреса и джанговского идиотского ORM на монгу и mongoengine. Уверен что все будет отлично )
😂 тут есть нюансы, не спеши переходить, если хотя бы не прикинешь как будет выглядеть переход. На монги именно сейчас столкнешся с тем, что нет транзакций и надо некоторую информацию дублировать в разных коллекциях (если коллекций у тебя много и между ними есть связи), чтобы апдейт одного поля не вызывал апдейт кучи документов...
Мечтатель
Спасибо