复杂的 Mongoose 过滤查询

2023-12-05

我正在构建一个允许用户使用侧边栏过滤结果的网站。他们选择的标准越多,搜索结果就应该越具体(见附图)。

用户可以选择与他们要查找的内容相匹配的过滤器(复选框)。我为此使用 MongoDB。我的架构如下:

brandName: {
    type: String,
    required: false
  },
productType: {
    type: String,
    required: false
  },
  skincareConcern: {
    type: Array,
    required: false
  },
  ingredients: {
    type: Array,
    required: false
  },
  skinType: {
    type: Array,
    required: false
  }

现在,我正在使用.find()$or查询但这不正确,即因为$or返回任何这些条件的所有匹配项。我需要结果来过滤/缩小我包含的更多标准。

请参阅下面我当前的代码:

Products.find({
    $or: [
      { brandName : { $in : brands, $exists: true, $ne: [] } },
      { skincareConcern : { $in : skincareConcerns, $exists: true, $ne: [] } },
      { productType : { $in : productTypes, $exists: true, $ne: [] } },
      { ingredients : { $in : ingredients, $exists: true, $ne: [] } },
      { skinTypes : { $in : skinTypes, $exists: true, $ne: [] } }
    ]
  }

示例有效负载:

{"brands":["ACWELL","BOTANIC FARM"],"skincareConcerns":[],"productTypes":["essence","moisturizer"],"ingredients":[],"skinType":[]}

enter image description here


您可以创建一个查询变量来保留将用于过滤的字段。

Sample:

var query = {};
var payload = {"brands":["ACWELL","BOTANIC FARM"],"skincareConcerns":[],"productTypes":["essence","moisturizer"],"ingredients":[],"skinType":[]};
if (payload.brands && payload.brands.length > 0) query.brandName = {$in : payload.brands};
if (payload.skincareConcerns && payload.skincareConcerns.length > 0) query.skincareConcern = {$in : payload.skincareConcerns};
if (payload.productTypes && payload.productTypes.length > 0) query.productType = {$in : payload.productTypes};
if (payload.ingredients && payload.ingredients.length > 0) query.ingredients = {$in : payload.ingredients};
if (payload.skinTypes && payload.skinTypes.length > 0) query.skinTypes = {$in : payload.skinTypes};
var result = await Products.find(query);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复杂的 Mongoose 过滤查询 的相关文章

随机推荐