Ivanov
Может быть такое что чисто group выполняется по индексу, а когда делаешь сначала lookup потом group, group делается не по индексу?
Nick
нет, груп не использует индексы
pinelover
Всем привет! Вопрос из серии best practices: имеет ли смысл держать в модели два ID-шника - один ObjectId, другой автоинкримент для генерации человеческих ссылок типа /user/324? или лучше сразу основной id сделать автоинкриментирующимся?
Bat
ребята. нужно некоторое пояснение. переношу проект с монго2 на 3. по сути 2 коллекции, в одной 600 записей, в другой 6000. изза формы поступающих данных загоняю данные в 1ую, потом во 2ую. и после, некоторой математики, обновляю все позиции во второй (скажем пробиваю новые цены). В обоих случаях upsert. Потом "анализ" второй (обычный find с математикой не связанной со вставками) между пунктом 2 и 3 у меня дичайшая задержка в 2.5 минуты
Bat
включаю лог, а там в это время валится потоком нечто типа mongo_1 | 2018-06-25T04:37:44.718+0000 I COMMAND [conn66] command admin.$cmd command: endSessions { endSessions: [ { id: UUID("23ed5952-34b9-4071-b8ec-353fe00bb38f") } ], $readPreference: { mode: "secondaryPreferred" }, $db: "admin" } numYields:0 reslen:37 locks:{} protocol:op_query 0ms
Nick
@dd_bb подскажи есть ли в монге возможность при автобалансирвоании шардов указать приоритет, например если ест ьперекос между размером шардов, то чтобы в первую очередь сливало с самого тяжелого шарда, а не как повезет?
Nick
да вот тоже порыскал по докам и интернетам - тишина
Nick
Это было актуально перед пепвой заливкой данных. Тогда были вручную разбиты диапазоеы ключей по мощности и раскиданы на тот момент еще пустые чанки по шардам. Но сейчас это сделать вручную нереально, данных слишком много да и размер чанка в среднем 250 метров
Nick
Он пепеносится на другой шард пару часов
Nick
Смысла разбивать нет, мощность ключа лишь в 5 раз больше текущего количества чанков(40к) при условии, что часть из низ уже неперемещаемы изза лимитов на вес либо количество доков внутри
Nick
Да и контролить работу скрипта както накладно, е ли опять же вспомнить что стандартеый балансер умеет параллелиться, а в скрипте это придется уже реализовывать мне
Sergey
Да и контролить работу скрипта както накладно, е ли опять же вспомнить что стандартеый балансер умеет параллелиться, а в скрипте это придется уже реализовывать мне
Не понял про "умеет параллелиться". Что в скрипте, что в балансировщике, одна и та же команда moveChunk, в итоге. Что с чем должно параллелиться? Или речь об одновременном переносе чанков с разных шардов?
Nick
Про одновременное
h0ba
Есть у кого линк на конфу в тг по mariadb ?
Dmitrii
есть массив из 30 id, и коллекция например из 100000 записей, подскажите, каким методом воспользоваться, чтобы узнать какой из этих 30 id еще не находится в коллекции?
Dmitrii
👍
Nick
если стоит задача просто залить данные, то можно просто через upsert true перезатереть
Bandikoot
так в результате будет около 99971 записей
Dmitrii
не это не то
Dmitrii
мне не нужено выбрать все записи, мне нужно понять какие из 30 еще не находятся в БД
Nick
$in
Anonymous
Добрый день. подскажите как такое возможнО, что у арбитра лежит коллекция на 40+ гб?
Nick
потом вычитание результат из текущего массива
Dmitrii
точно
Vadym
Добрый день! Необходимо мнение специалистов в области MongoDb. Как лучше организовать пагинацию на фронте, используя mongodb? Ведь дял пагинации необходимо знать зараннее общее колличество элементов ну и сами отсупы и колличество выбираемых элементов. Что бы не обращаться пару раз к базе, можно ли такое реализовать одним запросом? И желательно без агрегации?
Stepan
А как вы хотите из бд отсупы и колличество выбираемых элементов узнать?
Vadym
Конечно отсупы и выбираемые элементы приходят с клиента. Я к тому, что бы всю эту выборку реализовать одним запросом и без аггрегации(если такое возможно)
Stepan
Вся выборка ето что?
Stepan
Нужные элементы?
Stepan
И их количество?
Vadym
Ну допустим у меня есть в базе 1000 элементов. И на клиенте реализована пагинация в колличестве по 10 элементов при каждом скроле. Допустим он пришлет мне limit=10, offset=0. Я ему в ответ первые 10 элементво и total = 1000;
Vadym
Возможно как то одни запросом выбрать конкретные элементы и получить общее колличество?
Nick
можно поизвращаться с https://docs.mongodb.com/manual/reference/operator/aggregation/facet/
Nick
но сразу можете забыть про индексы
Stepan
Удобная вещь
Stepan
Но, разве оно не будет использовать индекс для обычного $match
Stepan
?
Nick
может и будет, надо тестить, но я чтото не верю что последующий стейдж будет использовать индекс для скип/лимита и подсчета количества
Sergey
Ещё стоит готовиться к тому, что count в монге имеет сложность O(N). Кроме тех случаев, когда речь идёт о количестве всех документов коллекции.
Sergey
Ну и в шардированных коллекциях будет обманывать в большую сторону.
Ilyas
Привет парни. Как сгруппировать данные по часам? У меня хранится объект такого типа: { _id:5b327abba7bd45090fecc556, pair:BTC-BAT, date:2018-06-26T17:41:15.126Z, volume: 76160.96741849463, askName:liqui, bidName:bittrex, askPrice:0.0000371714305997196, bidPrice:0.000037914859211713974 }
Ilyas
Понял. Нужно было сделать так: { $group: { _id: { $hour: "$date" } } }
Bat
ребята, про блокировки в wiredtiger. пишу в одну коллекцию, читаю из другой. результат получаю только когда запись прошла. почем глобальный лок то?
Andru
const t1 = await Model.find().populate('log'); Должно так работать в монгусе? Нужны все записи модели с запопулейченными рефками. Чет не популейтит вот так, как я выше написал.
Andru
const modelSchema = new Schema( { log: { type: Schema.Types.ObjectId, ref: 'log', unique: true }, status: { type: Number, required: true, index: true } }, { timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } } );
Andru
даже если findOne делать, то хрен
Yurii
а модель 'log' объявлена?
Andru
ммм, где она должна быть объявлена?
Yurii
ммм, где она должна быть объявлена?
ну как эту модель ты обьявил, так и ту надо
Yurii
ммм, где она должна быть объявлена?
mongoose.model('log', LogShema) что-то такое должно у тебя быть
Andru
ну конечно это есть у каждой модели
Yurii
ну конечно это есть у каждой модели
и у тебя совпадают названия с ref, которые ты зарегистрировал в mongoose?
Andru
и у тебя совпадают названия с ref, которые ты зарегистрировал в mongoose?
да, они все через константы идут, так что ошибки быть не может в названиях
Andru
log: { type: Schema.Types.ObjectId, ref: 'log', unique: true } из-за unique здесь не может быть проблем? ща уберу попробую
pinelover
Привет! Подскажите пожалуйста, кто реализовывал микросервисную архитектуру с несколькими типами пользователей, как лучше организовать хранение пользовательских данных - в разных сервисах для разных типов пользователей, или разные collections для разных типов юзеров в одном пользовательском сервисе? + сервис авторизации отдельно
Yurii
вот это: ref: 'log', и: mongoose.model('log', LogShema) слово 'log' через константу?
Yurii
это я сюда в чат написал для простоты
ну ты же понимаешь связь между ref и mongoose.model ? Я уточняю, потому, что это может не работать, так как нет модели в памяти монгуса, на которую ты делаешь ref...
Andru
а то обычно начинают спрашивать "что за константа", "что за переменная"
Andru
ну ты же понимаешь связь между ref и mongoose.model ? Я уточняю, потому, что это может не работать, так как нет модели в памяти монгуса, на которую ты делаешь ref...
ну это не первая модель в проекте с рефками, везде работает, тут нет, одна лишь разница - в unique, этот параметр еще нигде не использовал и не читал вообще возможно ли его с рефками использовать
Andru
да уже без него попробовал - не зашло, уже не знаю куда смотреть, сравниваю две модели - вроде все сходится, только одна работает, другая нет ))
Andru
вот что пишет Mongoose: orders_log.find({}, { fields: {} })
Andru
orders_log - это моя Model
Yurii
вот что пишет Mongoose: orders_log.find({}, { fields: {} })
ну то есть второго запроса нет. А первый возвращает данные и в документах есть поле 'log'?
Andru
ща напишу 1 в 1 как у меня
Andru
Модель: const Schema = mongoose.Schema; const modelSchema = new Schema( { dropLog: { type: Schema.Types.ObjectId, ref: tools.TBL.DROP_LOG, unique: true }, balanceLog: { type: Schema.Types.ObjectId, ref: tools.TBL.BALANCE_LOG, unique: true }, status: { type: Number, required: true, index: true } }, { collection: tools.TBL.ORDERS_LOG, timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } } ); const Model = mongoose.model(tools.TBL.ORDERS_LOG, modelSchema); module.exports = Model; Роутер: const Orders = require('../models/orders_log'); const t1 = await Orders.find().populate(tools.TBL.BALANCE_LOG);
Andru
ну документы из модели ORDERS_LOG оно мне выдает же
Andru
да сделал
Andru
результат есть, а вот в монгусе никак не хочет
yopp
Stable: 4.0.0 (Jun 27, 2018) Bugfix: 3.6.5 (May 25, 2018), Legacy: 3.4.15 (May 16, 2018) MongoDB quick overview/production notes: https://www.percona.com/live/e17/sites/default/files/slides/Running%20MongoDB%20in%20Production%20-%20FileId%20-%20115299.pdf 4.0.0: https://docs.mongodb.com/manual/release-notes/4.0/ 3.6.5: https://docs.mongodb.com/manual/release-notes/3.6/#may-29-2018 3.4.15: https://docs.mongodb.com/manual/release-notes/3.4/#may-16-2018 3.2.20: https://docs.mongodb.com/manual/release-notes/3.2/#may-10-2018 (End of life: September 2018) 3.0.x: Support ended February 2018