Val
У вас группируется сразу по нескольким ключам?
Ну типо того. Группируется по одному, по остальным суммируется
Нуриддин
Эмм
Нуриддин
Хорошо
Нуриддин
Можно пример документа и запроса который вы используете и какой вид ожидаете
Нуриддин
+тут выше был хороший сайт для тренировок с работой на пайплайнах
Нуриддин
Только найти не могу
Kirilll
+тут выше был хороший сайт для тренировок с работой на пайплайнах
Ого Если найдешь, дай знать А то тоже все никак нормально не разберусь
Vadzim
Robot3t еще
Уже ж вроде неактуально, вместо нее studio3t
Дмитрий
Robot3t еще
Но он не поддерживает последние версии монги. Вообще имхо лучше всего - nosqlbooster Studio3t и compass - слишком снижен порог входа, что неудобно для продвинутого пользователя
Дмитрий
а опенсорсное чего-то такое есть?
Не задавался таким вопросом🤷
Alexander
nosqlnavigator for mongodb удобен, но это плагин для idea, еще nosql booster есть
Kvhqm
Скажите плз, а есть ли какой-то конструктор агрегированных запросов?
Kvhqm
и не мешало бы узнать, есть ли смысол проверять нашлась ли запись перед агрегацией. А то я не помню почему когда-то добавил её, и теперь в любой непонятной ситуации добавляю её (проверку) :)
Сергей
Всем привет! Кто то пробовал такое решение для мониторинга? https://github.com/JamesOsgood/mongodb-grafana
Anuar
Ребят, кто может помочь ? Делаю PUT/POST запросы. Все было норм потом решил еще три филда добавить type, category, properties. Запрос идет, вроде все правильно но изменений в бд нет и в гет запросе тоже.
Anuar
"title": "Toyota Camry XV75", "description": "Toyota Camry XV75", "images": [ "https:// ..." ], "vinNumber": "12354ljk1h2b1234 ", "mileage": "12341234", "mainDamage": "-", "secondaryDamage": "-", "valuedPrice": 15000000, "cylinders": 4, "carcaseType": "2", "color": "Серый", "engineType": "2.5", "transmission": "AUTOMATIC", "driveUnit": "2WD", "tsClassification": "AUTOMOBILE", "fuelType": "Бензин", "keys": 2, "category": "66192d76fec73c6bc2e64bb6", "type": "popular", "properties": {}, "_id": "661927e5fec73c6bc2e64ba0" } вот такой запрос
Anuar
может в коллекции есть ограничения по количеству rows ?
Anuar
весь код пересмотрел там вроде все норм, пересмотрел раз 100 наверно
-
Запрос к самой бд покажи
Anuar
import { Car } from '@/models/Car' import { mongooseConnect } from '@/lib/mongoose' import { isAdminRequest } from '@/pages/api/auth/[...nextauth]' export default async function handle(req, res) { const { method } = req await mongooseConnect() await isAdminRequest(req, res) if (method === 'GET') { if (req.query?.id) { res.json(await Car.findOne({ _id: req.query.id })) } else { res.json(await Car.find()) } } if (method === 'POST') { const { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.create({ title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties }) res.json(carDoc) } if (method === 'PUT') { const { title, type, _id, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.updateOne( { _id }, { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } ) res.json(carDoc) } if (method === 'DELETE') { if (req.query?.id) { await Car.deleteOne({ _id: req.query?.id }) res.json(true) } } }
Nick
import { Car } from '@/models/Car' import { mongooseConnect } from '@/lib/mongoose' import { isAdminRequest } from '@/pages/api/auth/[...nextauth]' export default async function handle(req, res) { const { method } = req await mongooseConnect() await isAdminRequest(req, res) if (method === 'GET') { if (req.query?.id) { res.json(await Car.findOne({ _id: req.query.id })) } else { res.json(await Car.find()) } } if (method === 'POST') { const { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.create({ title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties }) res.json(carDoc) } if (method === 'PUT') { const { title, type, _id, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.updateOne( { _id }, { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } ) res.json(carDoc) } if (method === 'DELETE') { if (req.query?.id) { await Car.deleteOne({ _id: req.query?.id }) res.json(true) } } }
а где $set в апдейте?
Anuar
какой еще set
-
есть мысли ?)
Не хватает $set и updateOne не вернёт изменённый документ
Anuar
import { Car } from '@/models/Car' import { mongooseConnect } from '@/lib/mongoose' import { isAdminRequest } from '@/pages/api/auth/[...nextauth]' export default async function handle(req, res) { const { method } = req await mongooseConnect() await isAdminRequest(req, res) if (method === 'GET') { if (req.query?.id) { res.json(await Car.findOne({ _id: req.query.id })) } else { res.json(await Car.find()) } } if (method === 'POST') { const { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.create({ title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties }) res.json(carDoc) } if (method === 'PUT') { const { title, type, _id, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.updateOne( { _id }, { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } ) res.json(carDoc) } if (method === 'DELETE') { if (req.query?.id) { await Car.deleteOne({ _id: req.query?.id }) res.json(true) } } }
можете написать в коде ?
Anuar
чет не понимаю куда это
Anuar
и как
-
можете написать в коде ?
await Car.updateOne({_id}, {$set: req.body})
-
https://www.mongodb.com/docs/manual/reference/operator/update/set/
Kvhqm
И там где пост сразу из боди запихивай напрямую. Зачем тебе переменных вагон, которые нужны только один раз что бы переложить из пустого в порожнее
-
И там где пост сразу из боди запихивай напрямую. Зачем тебе переменных вагон, которые нужны только один раз что бы переложить из пустого в порожнее
На текущем этапе он и в put может сделать по аналогии т.к. используется mongoose и не мешало заменить updateOne на findOneAndUpdate и в options прокинуть {new: true}
Anuar
await Car.updateOne({_id}, {$set: req.body})
к сожаление не работает
-
к сожаление не работает
Что конкретно у вас не работает?
Anuar
import { Car } from '@/models/Car' import { mongooseConnect } from '@/lib/mongoose' import { isAdminRequest } from '@/pages/api/auth/[...nextauth]' export default async function handle(req, res) { const { method } = req await mongooseConnect() await isAdminRequest(req, res) if (method === 'GET') { if (req.query?.id) { res.json(await Car.findOne({ _id: req.query.id })) } else { res.json(await Car.find()) } } if (method === 'POST') { const { title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties } = req.body const carDoc = await Car.create({ title, type, description, images, vinNumber, mileage, mainDamage, secondaryDamage, valuedPrice, cylinders, carcaseType, color, engineType, transmission, driveUnit, tsClassification, fuelType, keys, category, properties }) res.json(carDoc) } if (method === 'PUT') { const { _id } = req.body const carDoc = await Car.updateOne({ _id }, { $set: req.body }) res.json(carDoc) } if (method === 'DELETE') { if (req.query?.id) { await Car.deleteOne({ _id: req.query?.id }) res.json(true) } } }
Anuar
вот модифицированный код
Anuar
проблема та же
-
проблема та же
Какая из двух?
Anuar
Запрос идет, вроде все правильно но изменений в бд нет и в гет запросе тоже.
Anuar
а put запрос летел и сейчас летит нормально
Anuar
и прикол в том что именно type, category, properties эти поля не читает, а остальные отрабатывают как надо
-
А у вас они в схеме прописаны?
-
Показывайте схему
Anuar
да
Anuar
``` import mongoose, { model, Schema, models } from 'mongoose' const CarSchema = new Schema( { title: { type: String, required: true }, description: String, images: [{ type: String }], vinNumber: String, mileage: String, mainDamage: String, secondaryDamage: String, valuedPrice: { type: Number, required: true }, cylinders: Number, carcaseType: String, color: String, engineType: String, transmission: String, driveUnit: String, tsClassification: String, fuelType: String, keys: Number, type: { type: String, required: true }, properties: { type: Object }, category: { type: mongoose.Types.ObjectId, ref: 'Category' } }, { timestamps: true } ) export const Car = models.Car || model('Car', CarSchema) ```
Anuar
я чет не понимаю уже 2-й день
Anuar
пытаюсь решить это
IDONTSUDO
Anuar
Да я знаю что это такое
Anuar
Не в этом тут дело
Nick
``` import mongoose, { model, Schema, models } from 'mongoose' const CarSchema = new Schema( { title: { type: String, required: true }, description: String, images: [{ type: String }], vinNumber: String, mileage: String, mainDamage: String, secondaryDamage: String, valuedPrice: { type: Number, required: true }, cylinders: Number, carcaseType: String, color: String, engineType: String, transmission: String, driveUnit: String, tsClassification: String, fuelType: String, keys: Number, type: { type: String, required: true }, properties: { type: Object }, category: { type: mongoose.Types.ObjectId, ref: 'Category' } }, { timestamps: true } ) export const Car = models.Car || model('Car', CarSchema) ```
обратите внимание что category это ссылка на модель монгуса, поэтому просто положить объект в json не комильфо. Похорошему вам надо сначала озаботиться вытаскиванием дока из бд или как минимум обернуть в ObjectId пришедшее с фронта - там наверняка строка простая. Потом - оберните все в отлов ошибок с логирвоанием. Дальше updateOne не возвращает док в ответ, а вернет результат выполнения апдейта со служебной инфой. Если вам надо док, то это findAndUpdate
Anuar
Я вот точно такой же код писал для другой бдшки
Anuar
Все работало
Anuar
Вот не понимаю что случилось то за полгода
Nick
Вот не понимаю что случилось то за полгода
это ж js, там все что угодно могло случиться
Anuar
Вы не поверите
Anuar
надо было всего-то перезапустить проект
Anuar
😀
Denis
Всем привет Прошу не кидать камни, с mongo начал общаться вчера Сейчас на моем проекте есть 1 менеджд кластер на яндексе, 1 жирный хост, там 15 бд, самая прожорливая 1 коллекий в 1 бд Лид хочет ускорить запросы на чтение, и снизить нагрузку на хост, чтобы понизить класс (меньше цпу и озу) Вариант с репликацией, который изначально сказал лид: доабвляем 2 реплики, по докам понял, что запросы все равно все обрабатывает primary, для того, чтобы на чтение летели к реплика указываем readPreference=secondaryPreferred (можно поймать рассинхрон) Вариант с шардингом: 2 шарда юез реплик. Как я понимаю, обычные бд будут раскиданы по ним автоматически. В самой жирной бд включаю шардинг на самую большую коллекцию по нужному инедксу, и она уже будет раскидана по ним. При этом будет 2 хоста, как я понимаю, под данные и автоматом яндекс создаст MONGOS и MONGOCFG Вопрос в том, поможет ли и какой лучше подходит из этих вариантов? Первичная цель ускорить запросы на чтение, вторичная разбить 1 большой хост на несколько поменьше (сейчас 8 цпу 32 озу, понизить до 4 цпу, 16 озу)
Andrey
Всем привет Прошу не кидать камни, с mongo начал общаться вчера Сейчас на моем проекте есть 1 менеджд кластер на яндексе, 1 жирный хост, там 15 бд, самая прожорливая 1 коллекий в 1 бд Лид хочет ускорить запросы на чтение, и снизить нагрузку на хост, чтобы понизить класс (меньше цпу и озу) Вариант с репликацией, который изначально сказал лид: доабвляем 2 реплики, по докам понял, что запросы все равно все обрабатывает primary, для того, чтобы на чтение летели к реплика указываем readPreference=secondaryPreferred (можно поймать рассинхрон) Вариант с шардингом: 2 шарда юез реплик. Как я понимаю, обычные бд будут раскиданы по ним автоматически. В самой жирной бд включаю шардинг на самую большую коллекцию по нужному инедксу, и она уже будет раскидана по ним. При этом будет 2 хоста, как я понимаю, под данные и автоматом яндекс создаст MONGOS и MONGOCFG Вопрос в том, поможет ли и какой лучше подходит из этих вариантов? Первичная цель ускорить запросы на чтение, вторичная разбить 1 большой хост на несколько поменьше (сейчас 8 цпу 32 озу, понизить до 4 цпу, 16 озу)
очень "абстрактный" вопрос, а сколько сейчас и в каком месте замеряете, что есть есть медленно, а что быстро.
Nick
Всем привет Прошу не кидать камни, с mongo начал общаться вчера Сейчас на моем проекте есть 1 менеджд кластер на яндексе, 1 жирный хост, там 15 бд, самая прожорливая 1 коллекий в 1 бд Лид хочет ускорить запросы на чтение, и снизить нагрузку на хост, чтобы понизить класс (меньше цпу и озу) Вариант с репликацией, который изначально сказал лид: доабвляем 2 реплики, по докам понял, что запросы все равно все обрабатывает primary, для того, чтобы на чтение летели к реплика указываем readPreference=secondaryPreferred (можно поймать рассинхрон) Вариант с шардингом: 2 шарда юез реплик. Как я понимаю, обычные бд будут раскиданы по ним автоматически. В самой жирной бд включаю шардинг на самую большую коллекцию по нужному инедксу, и она уже будет раскидана по ним. При этом будет 2 хоста, как я понимаю, под данные и автоматом яндекс создаст MONGOS и MONGOCFG Вопрос в том, поможет ли и какой лучше подходит из этих вариантов? Первичная цель ускорить запросы на чтение, вторичная разбить 1 большой хост на несколько поменьше (сейчас 8 цпу 32 озу, понизить до 4 цпу, 16 озу)
потенциал по ускорению самих запросов уже исчерпан?
Nick
Всем привет Прошу не кидать камни, с mongo начал общаться вчера Сейчас на моем проекте есть 1 менеджд кластер на яндексе, 1 жирный хост, там 15 бд, самая прожорливая 1 коллекий в 1 бд Лид хочет ускорить запросы на чтение, и снизить нагрузку на хост, чтобы понизить класс (меньше цпу и озу) Вариант с репликацией, который изначально сказал лид: доабвляем 2 реплики, по докам понял, что запросы все равно все обрабатывает primary, для того, чтобы на чтение летели к реплика указываем readPreference=secondaryPreferred (можно поймать рассинхрон) Вариант с шардингом: 2 шарда юез реплик. Как я понимаю, обычные бд будут раскиданы по ним автоматически. В самой жирной бд включаю шардинг на самую большую коллекцию по нужному инедксу, и она уже будет раскидана по ним. При этом будет 2 хоста, как я понимаю, под данные и автоматом яндекс создаст MONGOS и MONGOCFG Вопрос в том, поможет ли и какой лучше подходит из этих вариантов? Первичная цель ускорить запросы на чтение, вторичная разбить 1 большой хост на несколько поменьше (сейчас 8 цпу 32 озу, понизить до 4 цпу, 16 озу)
в общем из важного что стоит не забывать при шардировании - промежуточные результаты сливаются на mongos и там доагрегируются, если запрос не может быть полностью выполнен на одном из шардов. Как следствие машинах с монгосом необходимо держать какието ресурсы, чтобы переваривать запросы как по объемам данных, так и по цпу дял условной сортировки например. Соответсвенно сетап кластера шардирвоанного может быть подороже чем просто крупный сервак под репликасет
Denis
потенциал по ускорению самих запросов уже исчерпан?
В целом все обсудили, я не совсем правильно понял Пока ускорение не первоцель, а на будущее. В целом 2 шарда в таком формате помогут или скорее можем получить обратный эффект?
Nick
В целом все обсудили, я не совсем правильно понял Пока ускорение не первоцель, а на будущее. В целом 2 шарда в таком формате помогут или скорее можем получить обратный эффект?
зависит всецело от запросов, структуры, выбранного ключа шардирования, объема выборок, наличия лукапов к нешардирвоанным коллекциям и т.п.
Nick
В целом все обсудили, я не совсем правильно понял Пока ускорение не первоцель, а на будущее. В целом 2 шарда в таком формате помогут или скорее можем получить обратный эффект?
в общем случае шардирвоание применяют когда упираюстя в ресурсы по записи либо в место на одном сервере с невозможностью дальнейшего его расширения. В остальных ситуациях профита от шардирования нет. Можно еще оценить как подготовку "на будущее", когда такие проблемы однозначно появятся.
Сергей
Ребята,всем привет! Вопрос по монго-экспортеру для графаны и прометеуса. Точнее даже так вопрос,кто мониторит графаной и прометеусом- вы как снимаете размеры баз данных монги? Те экспортеры что я нашел- там в основном технические метрики(память,процессор,статус сервера и т.п.)
Konstantin
Привет. Мне нужна помощь по подключению монго
Konstantin
Сыпет ошибками
Konstantin
Тут помочь могут?
Сергей
А что нужно конкретнее
Конкретно-надо вывести на дашборд информацию о совокупном размере всех баз данных на сервере. Условно говоря есть сервер mongo1 и мне надо на дашборд вывести -размер баз 50гб
Сергей
те экспортеры которые нашлись там только технические метрики и не слова про базы как таковые 🤷‍♂️
Сергей
лицензию на плагин графана в РФ не продает
Нуриддин
Подключаете несколько экспортеров и радуйтесь жизни