elusiv
@elusiv
kamzin.com

Как сделать запрос в MongoDB из query параметров во вложения?

Всем привет!

На мой сервер приходит запрос на список товаров. Когда мне понадобилось сделать фильтрацию столкнулся с проблемой, что не могу из http запроса передать инфу методу find чтобы он отдавал инфу именно из вложенного объекта в том числе.

В БД структура такая:
62e984aa81639860842147.png

Количество записей и страницу получаю по query параметрам. Может быть как то json использовать? Опыт очень маленький... Буду рад любым советам. Можно и структуру передать в бд и избавиться от вложенности, но крайне не хочется.
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
elusiv
@elusiv Автор вопроса
kamzin.com
Сделал так:
let { category } = req.params
let { page, limit, quantity, price_from } = req.query
category = await Category.findOne({ slug: category })
if (quantity) req.query.quantity = { $gt: quantity }
if (price_from) req.query.price = { $gt: price_from }
page = page || 1
limit = limit || 20
const paramsCategory = category.params
let params = {}
for (const el in req.query) {
	const param = paramsCategory.find(val => val.property === el)
	let prop = ''
	if (param) {
		if (param.type === 'number') prop = Number(req.query[el])
		if (param.type === 'string') prop = req.query[el].toString()
		if (param.type === 'variants') prop = req.query[el].toString()
		const paramName = `params.${el}`
		params[paramName] = prop
	} else {
		params[el] = req.query[el]
	}
}
params = JSON.parse(JSON.stringify(params))
return Product.find({ category: category._id, ...params })
	.limit(limit)
	.skip(page * limit - limit)
	.then(data => res.json(data))
	.catch(error => next(ApiError.badRequest(error.message)))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы