一尘不染

Javascript 将数组转换为对象以在 Mongoose 中的 Find 中使用

javascript

我正在尝试为 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 方法中使用我的过滤器数组?


阅读 100

收藏
2022-07-25

共1个答案

一尘不染

你需要reduce()一个对象:

const filters = [
  { name: { '$eq': 'John' } },
  { surname: { '$regex': '.*t', '$options': 'i' } }
];

const filter = filters.reduce((a, v) => ({...a, ...v}), {});

console.log(filter);
2022-07-25