如何从Mongoose查询中仅获取articlePrice的纯数值而非带属性名的结果?
解决Mongoose查询返回纯数值的问题
方法一:修改现有查询逻辑
你的find()方法返回的是包含单个文档的数组,即使加了limit(1)也还是数组,且返回结果是Mongoose文档对象。可以通过以下步骤提取纯数值:
- 用
lean()将Mongoose文档转为普通JavaScript对象(提升性能) - 从数组中取出第一个元素,再提取
articelPrice属性值
修改后的代码:
//Search Articles export const searchArticels = async (req, res) => { const maxPrice = await Articel.find() .sort({ articelPrice: -1 }) .limit(1) .select("articelPrice -_id") .lean(); // 转为普通JS对象 const minPrice = await Articel.find() .sort({ articelPrice: 1 }) .limit(1) .select("articelPrice -_id") .lean(); // 提取纯数值,可选链避免集合为空时报错 const pureMaxPrice = maxPrice[0]?.articelPrice; const pureMinPrice = minPrice[0]?.articelPrice; console.log("MAX: " + pureMaxPrice); console.log("MIN: " + pureMinPrice); };
方法二:用聚合查询(更高效)
如果仅需获取最大/最小价格,使用MongoDB聚合框架更高效——无需对整个集合排序,一次查询就能计算出结果:
//Search Articles export const searchArticels = async (req, res) => { const [priceStats] = await Articel.aggregate([ { $group: { _id: null, maxPrice: { $max: "$articelPrice" }, minPrice: { $min: "$articelPrice" } } } ]); const pureMaxPrice = priceStats?.maxPrice; const pureMinPrice = priceStats?.minPrice; console.log("MAX: " + pureMaxPrice); console.log("MIN: " + pureMinPrice); };
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

