繁体   English   中英

Javascript 将数组转换为 object 以用于 ZCCADCDEDB567ABAE643E15DCF0974E503Z 中的查找

[英]Javascript convert array to object to use in Find in Mongoose

我正在尝试为 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 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()为单个 object:

 const filters = [ { name: { '$eq': 'John' } }, { surname: { '$regex': '.*t', '$options': 'i' } } ]; const filter = filters.reduce((a, v) => ({...a,...v}), {}); console.log(filter);

您的结果是待处理的 promise

您需要使用异步 function 并使用await

const query = await this.customerModel.find(findFilters);

.then()

this.customerModel.find(findFilters).then(res => {
   console.log(res);
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM