node.js - 如何查询mongodb
问题描述
我得到了这段代码,我想从模型中返回所有产品并通过查询对它们进行排序;路由后面的查询// ?sortBy=sold&order=desc&limit=100&skip=5
而我用于路由的控制器,我知道我一定做错了什么:
exports.menBySell = async (req, res, next) => {
let order = req.query.order ? req.query.order : "asc";
let sortBy = req.query.sortBy ? req.query.sortBy : "_id";
let limit = req.query.limit ? parseInt(req.query.limit) : 100;
try {
const menBySell = await Men.find()
.populate("color")
.populate("brand")
.sort([[sortBy, order]])
.limit(limit)
.exec(articles);
return res.json(articles);
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
};
解决方案
您可以添加如下函数,该函数从您的查询字符串接收过滤器对象:
const parseQueryFilter = (filter) => {
if (!filter) {
return {options: null, newFilter: {}};
}
let options = null, newFilter = Object.assign({}, filter);
Object.keys(newFilter).forEach((k) => {
try {
if (k === 'sortBy') {
console.log(filter[k]);
options = {sort: JSON.parse(filter[k])};
delete newFilter[k];
} else {
console.log(filter[k]);
newFilter[k] = JSON.parse(filter[k]);
}
} catch (e) {
}
});
return {options, newFilter};
};
然后,您使用此函数将过滤器作为参数传递,它将检索选项对象(其中将包含“sortBy”查询字符串中的选项和包含查询字符串中其他参数的 newFilter 对象。
let {options, newFilter} = parseQueryFilter(filter);
return Men.find(newFilter, null, options);
推荐阅读
- r - 具有近似函数的密度函数形式
- python - 在执行其他代码时不断检查按钮是否按下?
- dart - Dart/SQFlite 导入错误
- linux - 如何让 U-boot 自动从 FAT 分区加载
- java - Intellij Idea JPA 控制台由于“[3D000] 未选择数据库”而无法运行
- python - 用于加密货币的 Python - 数据结构
- javascript - .val() 仅返回 PHP 数组中的第一行
- excel - 将特定单元格导出到 MS Access
- spring-batch - 如何以 CSV 格式指定正确的时间戳
- architecture - 大数据项目可扩展架构