
Yurii
29.03.2018
19:57:44
ну и в project описать все необходимые поля на выходе

ruby
29.03.2018
19:58:20
спасибо, пробую
с last не получилось, сделал через slice

Google

ruby
29.03.2018
20:10:36
db.getCollection('users').aggregate({
$project: {
"stats.techniques": { $slice: ["$stats.techniques", -1] }
}
})

Nick
29.03.2018
23:20:56
тут по mongodb

Сергей
30.03.2018
06:01:41
Ребята привет, помогите побороть проблему, не могу понять в чем "прикол". При запросе к БД вида "value"=>'3A002E001657345630373420' ищет запись, а такую "value"=>'31002E000857345630373420' - уже нет - хотя эти записи 100% есть. Руками в Robomongo могу найти, но скриптом, почему-то вторую запись не так воспринимает...

John
30.03.2018
07:19:21
посмотри какой запрос генерится
и у тебя нету доп условий? может вторая запись по ним не проходит

keystr0ke
30.03.2018
07:27:04

Сергей
30.03.2018
07:27:33
нет, 100% не find_one
т.к. запрос динамический и в него приходят переменные из других мест и там результаты долеки от одной строки

keystr0ke
30.03.2018
07:28:12
покажите запросы которые отправляете

Игорь
30.03.2018
07:57:36
подскажите, если у меня запрос find по двум полям.
запрос
find({$and: [
{$or: [
{'category': {$in: [16, 17, 18, 19]}},
{'kind': {$in: [21373754,21373763,21373768]}} ] },
{'kind': {$nin: [23,24,25,26]}} ] } )
В ощем случае, то что поле используеться и в $in и потом $nin
как-то повлияет на посторение индекса?
сейчас создал индекс kind, category.

Nick
30.03.2018
07:58:56
explain в помощь

Aleksandr
30.03.2018
08:01:07
И проверьте ещё какое поле даёт большее сужение поиска для следующего условия

Oleg ?
30.03.2018
08:01:27
Ребята, привет. Подскажите, какой правильный и безопасный путь сжатия места в реплика сете, после дропания данных на всех мемберах

Google

Oleg ?
30.03.2018
08:01:35
буду благодарен за подсказки

Eugene
30.03.2018
08:12:25
Как описать в схеме монгуса массив объектов?

Игорь
30.03.2018
08:13:36

Nick
30.03.2018
08:13:50
вот и ответили на свой вопрос

Игорь
30.03.2018
08:13:56
на всех трех этапах

Nick
30.03.2018
08:14:27

Сергей
30.03.2018
08:32:59

Nick
30.03.2018
08:41:10
а есть такой докуент в базе?

Сергей
30.03.2018
08:43:35
да, конечно
они у меня в таблицу на сайте выводятся
я там делаю фильтр
в БД "строка"

Nick
30.03.2018
09:05:56
а второе поле mfr_needles?

Сергей
30.03.2018
09:06:58
оно всегда одно и тоже (по крайней мере в примерах выше)
только mcu_id меняется

Nick
30.03.2018
09:07:32
я про значение в документе
короч выполните свой запрос с одним полем mcu_id в монгошелле

yopp
30.03.2018
09:10:27
В WT будет очень небольшой оверхед.

Google

Сергей
30.03.2018
09:11:03

Oleg ?
30.03.2018
09:11:29

yopp
30.03.2018
09:11:31
Единственный способ переложить эффективно данные — все прочитать и потом записать снова.

Nick
30.03.2018
09:11:35

Oleg ?
30.03.2018
09:11:53
тоесть накатить новый мембер ?

yopp
30.03.2018
09:11:59

Oleg ?
30.03.2018
09:12:36
цель - уменьшить количество используемого места под монгу выпилив старые данные

yopp
30.03.2018
09:13:06
delete батчами

Сергей
30.03.2018
09:13:06
db.getCollection('data').find({'mfr_step': 'mfr_needles', 'mcu_id' : '360033001657345630373420'}).sort({process_time: -1})
выдает ответ

yopp
30.03.2018
09:14:19
После delete делать ничего не надо, емнип, wt сам отдаст место в хранилище, если сможет.
Если не сможет, то да, добавить временную реплику и в неё все перелить.
А потом initial sync по кругу сделать из неё

Nick
30.03.2018
09:15:05

Сергей
30.03.2018
09:15:28
видимо в perl - тогда наверное не тут спрашваю :)
видимо не явно в число преобразует...

Nick
30.03.2018
09:16:19
а если не секрет то что за задачу решаете на перле с монгой?

Сергей
30.03.2018
09:17:53
производство оборудования
точнее процесс тестирования

yopp
30.03.2018
09:22:34
Клево!

Google

yopp
30.03.2018
09:22:50
А много данных?
Вы в монгу только результаты QA пишите? Или прямо протоколы тестирования?

Сергей
30.03.2018
09:24:11
я занимаюсь только выводом уже иеющейся инфы :)

Игорь
30.03.2018
10:20:41
Такая ситуация. Есть массив значений поля, по которому нужно извлечь документы. Массив большой, несколько десятков тысяч значений. Оператор $in невероятно долго это выполняет, даже с индексом. Как лучше сделать?

Nick
30.03.2018
10:25:33
поменять структуру даных

Игорь
30.03.2018
10:26:05
?

Nick
30.03.2018
10:27:20
вот берете свою основную задачу, и пытаетесь перестроит ьструктуру данных чтобы стало удобно работать и не зависеть от индексов

Игорь
30.03.2018
10:31:14
ну тут даже не в индексах дело. есть коллекция. В ней миллион документов. У документа есть поле offer с уникальным значением для каждого документа. Приходит запрос, в нем массив данных с конкретными значеними поля оффер. Допустим 100 000.
как это эффективно извлечь
$in захлебывается
на такой массив

Nick
30.03.2018
10:33:08
а вам нужны все 100000 документов?

Игорь
30.03.2018
10:35:27
да, все документы у которых поле offer совпадает со значением в массиве. Грубов говоря, у товара есть уникальный id, есть массив с id этих товарав. Их 100 000, в коллекции миллион. Мне нужны только эти 100 000, которые запросили

Nick
30.03.2018
10:36:13
ну а дальше что вы делаете с этими 100к доками? сколько из них показываете?
или
то выгрузк в экмели всякие всего подряд?

Игорь
30.03.2018
10:38:55
Все. Извлекаю, формирую из них файл и отдаю обратно.

Nick
30.03.2018
10:40:06
тогда проще выгружать вообще все и фильтровать на клиенте если данных так много

Игорь
30.03.2018
10:41:28
То есть у монго нет эффективного средства для подобной выборки? Хотел сделать на стороне базы, в принципе и на клиенте можно, но не хотелось лишний раз такие объемы извлекать туда-сюда

Nick
30.03.2018
10:41:44
его нигде нет

Google

Nick
30.03.2018
10:41:55
когда выбирается 10% всех данных
причем скорость получения всех данных ориентировочно будет значительно быстрее если использовать натуральный порядок в БД даже против использования индексов

Игорь
30.03.2018
10:44:03
ок, спс

Dmitry
30.03.2018
11:39:16
Выгружать миллион и делать на клиенте это тупик все равно. + траффик по сети. Оно минут 20 только выгружаться будет а потом память кончится. Это все равно нужно делать через запрос + paging
возможно можно добавить доп поле и просчитывать его в worker или сразу сохранять и по нему фильтровать

Игорь
30.03.2018
11:43:03
В общем $in справился, как ни странно. Нашел в коде утечку памяти из-за которой запрос начинла есть, как не всебя оперативку.
плюс добавил по этому же полю еще и $nin
работает

Dmitry
30.03.2018
11:44:48
какое у вас получилось время ответа севера? (для статистики)

Игорь
30.03.2018
11:50:11
тестировал на локальной машине, со скромными ресурсами. По коллекции с 800 000 записями сложный запрос
find({$and: [
{$or: [
{'category': {$in: [выбирает все 800 000 значений]}},
{'offer': {$in: [сто тысяч значений]}} ] },
{'offer': {$nin: [сорок тысяч значений]}} ] } )
условие categry $in дополнительно выбирает всю коллецию целиком для усложнения нагрузки.
тестирую через скрипт, время ответа базы к скрипту менее секунды. Плюс комп сейчас ОЧЕНЬ скромный по ресурсам, прям совсем
ну соотвественно, я не все данные передаю, а только число найденных документов?