从mongoose.find()创建对象集

时间:2019-05-24 09:21:14

标签: javascript mongoose

我需要基于数据中的唯一值创建一个过滤器对象,以传递给前端应用程序。我需要其中一个过滤器是对象数组。我先前的[...new Set()]方法无法正常工作,我收到一条错误消息,提示name: is unexpected, expected }

我的其他[...new Set()]功能都可以正常工作。

    let allEmployees = await db.Employee.find();

    let filters = {
      hiringManager: [...new Set(allEmployees.map(emp => {
         emplid: emp.emplid,
         name: emp.name,
         hrOrg: emp.hrOrg}
       ))].sort(function(a, b){return a.name - b.name}),
      countries:[...new Set(allEmployees.map(emp => emp.country))].sort(),
      globalGrades: [...new Set(allEmployees.map(emp => emp.globalGrade))].sort(),
      jobFamilies: [...new Set(allEmployees.map(emp => emp.jobFamily))].sort()
    };

关于如何返回一组对象的任何想法?

1 个答案:

答案 0 :(得分:1)

首先,我要避免在Set中使用传播运算符。因为有时在特定系统中会遇到一些解释问题(扩散运算符不能很好地处理类似数组的问题)。

const allEmployees = [{
  country: 'France',
}, {
  country: 'Westeros',
}, {
  country: 'France',
}];

const unique = Array.from(new Set(allEmployees.map(emp => emp.country))).sort();

console.log(unique);


然后,在您的情况下,您会错过括号。如果像这样使用map(emp => {,则map将考虑{内部的内容是一个函数定义。如果您想直接从地图返回数据,请将其包装在()内,例如:

map(() => ({

}));

const allEmployees = [{
  country: 'France',
}, {
  country: 'Westeros',
}, {
  country: 'France',
}];


const ret = [
  ...new Set(allEmployees.map(emp => ({
    emplid: emp.country,
  }))),
];

console.log(ret);