0

我有一个名为Project的集合。下面是项目集合的架构描述:

const projectSchema = new mongoose.Schema(
  {
    projectName: {
      type: String,
      trim: true
    },

    licenceType: {
      type: String,
      trim: true,
      lowercase: true
    },

    location: {
      type: String,
      lowercase: true,
      trim: true
    },

    description: {
      type: String,
      trim: true
    },

    projectType: {
      type: String,
      default: 'public'
    },

    status: {
      type: String,
      default: 'open'
    },

    budget: {
      type: Number
    },

    duration: {
      type: Number
    },
  },
  {
    timestamps: true
  }
);

我想使用这些字段作为过滤器来获取文档。字段是:

  • 许可证类型
  • 地点
  • 日期(为此目的在模式中设置时间戳)

我可以任意组合使用这三个字段来获取文档。有可能根本没有应用过滤器,在这种情况下,它只是简单地获取集合中的所有文档。

我知道我可以使用if--else if--else动态构建查询,但我想知道是否有任何其他更有效的方式来处理此类查询,而不是使用 if--else 块。如果有五个或更多字段用于过滤目的,那么使用 if--else 块将有很多组合需要检查。

感谢任何形式的帮助!谢谢。

4

1 回答 1

0

因此,我假设有一些外部触发器实际上会修改过滤器矩阵(例如,来自某些 UI 的请求)。Mongoose允许您以 object 的形式预先指定过滤器,请看下面:

const query = Project.find({
  licenceType: 'sometype',
  location: 'somelocation'
});

很明显你可以看到这个...

    {
      licenceType: 'sometype',
      location: 'somelocation'
    }

...是一个对象。因此,我认为您可以在每次过滤器更改时重新构建过滤对象(创建一个空对象let myFilters = {}并使用您的过滤器扩展它:)myFilters['licenceType'] = 'sometype'并传递myFiltersfind函数。

于 2020-09-17T20:18:36.627 回答