我试着按价格和范围过滤商品,但由于某些原因,过滤时只有最大值起作用,最小值被忽略了.

我的MongoSchema:

  const ProductSchema = new mongoose.Schema({
  ...
  variants: [
    {
      discount: {
        state: { type: Boolean, required: true },
        percent: { type: String, required: true },
      },
      price: { type: Number, required: true },
      ...
    },
  ],
});

My Search Via Find方法带有过滤器传递

export const getProducts = (filter: any) => ProductModel.find(filter);

我的过滤功能:

const priceArray = (price as string).split("-");
const priceFilter = { 'variants.price': { $gte: 1001, $lte: 10000 }};

if (categories !== "all") {
      const categoriesArray = (categories as string).split(",");
      categoriesFilter = { categoryID: { $in: categoriesArray } };
    }

    const query = {
      ...categoriesFilter,
      ...priceFilter,
    }

    const products = await getProducts(query)
      .sort({ _id: sort === "asc" ? 1 : -1 })
      .skip((Number(page) - 1) * Number(limit))
      .limit(Number(limit))
      .populate([
        "categoryID",
        "variants.ingredients.ingredient.id",
        "variants.ingredients.ingredient.variantID",
      ])
      .exec();

这段代码正确地按类别过滤,也按价格过滤(但如上所述,它不考虑最小值,而只按最大值过滤).

这可能是什么问题?

推荐答案

因为variants是一个数组,所以您应该使用$elemMatch:

const priceFilter = { 
  "variants": {
    "$elemMatch": {
      "price": {
        "$gte": 1001,
        "$lte": 10000
      }
    }
  }
};

Working Example

Javascript相关问答推荐

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

我无法在NightWatch.js测试中获取完整的Chrome浏览器控制台日志(log)

if/else JavaScript中的条件行为

useNavigation更改URL,但不呈现或显示组件

colored颜色 检测JS,平均图像 colored颜色 检测JS

如何将Openjphjs与next.js一起使用?

我的角模板订阅后不刷新'

Chart.js-显示值应该在其中的引用区域

用于在路径之间移动图像的查询

如何在不影响隐式类型的情况下将类型分配给对象?

在css中放置所需 colored颜色 以填充图像的透明区域

传递方法VS泛型对象VS事件特定对象

当我点击一个按钮后按回车键时,如何阻止它再次被点击

处理app.param()中的多个参数

Node.js API-queryAll()中的MarkLogic数据移动

JAVASCRIPT SWITCH CASE语句:当表达式为';ALL';

如何在加载页面时使锚定标记成为焦点

REACT-本机错误:错误类型错误:无法读取未定义的容器的属性

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染