You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Mongoose查询中仅获取articlePrice的纯数值而非带属性名的结果?

解决Mongoose查询返回纯数值的问题

方法一:修改现有查询逻辑

你的find()方法返回的是包含单个文档的数组,即使加了limit(1)也还是数组,且返回结果是Mongoose文档对象。可以通过以下步骤提取纯数值:

  1. 用lean()将Mongoose文档转为普通JavaScript对象(提升性能)
  2. 从数组中取出第一个元素,再提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:42:46