我正在尝试为 Mongoose 中的搜索构建动态过滤器。
我得到了一个包含各种过滤器的数组,我想在 this.mySchema.find ({QUERY}) 中使用它们,如下所示:
[ { name: { '$eq': 'John' } }, { surname: { '$regex': '.*t', '$options': 'i' } } ]
现在我想按如下所有过滤器搜索
const query = this.customerModel.find(findFilters);
但我收到以下错误
find() 的参数 “filter” 必须是对象,得到 [object Object],[object Object]
我尝试将其转换为一个对象,但我得到了一些我也无法使用的东西
{ ...findFilters }
结果:
{ '0': { name: { '$eq': 'John' } }, '1': { surname: { '$regex': '.*t', '$options': 'i' } } }
我也试过这个:
const result = {}; findFilters.forEach(e => result[e] = {});
但是我得到了一些在 Find 中也不起作用的东西,并且过滤器在搜索过程中不起作用
{ '[object Object]': {} }
那么,如何在 Find 方法中使用我的过滤器数组?
你需要reduce()一个对象:
reduce()
const filters = [ { name: { '$eq': 'John' } }, { surname: { '$regex': '.*t', '$options': 'i' } } ]; const filter = filters.reduce((a, v) => ({...a, ...v}), {}); console.log(filter);