如何解决将数组减少为具有嵌套键的对象,以便将搜索查询传递给 Mongoose 中的 Model.find
我有一组用户输入的搜索参数,需要在 fetch() 请求的标头中作为查询字符串发送,以便使用 Mongoose 查询 MongoDB。该数组最多可包含 20-30 个对象(搜索过滤器),如下所示:
filters = [{…},{…}]
0: {fieldName: "city",searchString: "Rome",searchMode: "$eq"}
1: {fieldName: "country",searchString: "Spain",searchMode: "$ne"}
我需要将此过滤器数组缩减为一个对象数组,每个对象都包含一个搜索过滤器,该过滤器可以作为过滤器参数传递给 Mongoose 中的 Model.find()。对象将被字符串化并通过 req.query 从 fetch() 请求发送到后端。
对象需要具有以下语法:
{city: { $eq: Rome } }
所以我可以像这样将这个搜索过滤器从 Mongoose 传递给 MongoDB:
db.customers.find( { city: { $eq: "Rome" } } )
到目前为止,我已经想出了如何将初始数组减少为“键:值”对象的数组:
const jsonObj = filters.reduce((r,{ fieldName,searchString }) => (r[fieldName] = searchString,r),{})
任何人都可以帮助将数组减少到这种形式:
{city: { $eq: Rome } }
感谢您的帮助!
解决方法
您已经接近答案了,只需要对 reducer 函数进行一些更改:
let jsonObj = [
{fieldName: "city",searchString: "Rome",searchMode: "$eq"},{fieldName: "country",searchString: "Spain",searchMode: "$ne"}
];
let query = jsonObj.reduce((acc,{fieldName,searchString,searchMode}) => {
acc[fieldName] = { [searchMode]: searchString };
return acc;
},{});
console.log(query)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。