Mongoose和Node JS - 改进查找

时间:2016-12-18 12:29:04

标签: node.js mongodb mongoose mongoose-populate

我有集合A和集合B.我需要获得A中具有简单elemMatch的所有B(最好区别)。在这种情况下,A是形成,B是课程。我只需要当前获取的字段而不需要其他内容。

目前我有这个,这是有效的:

Formation.find({}, { _id: 0, course: 1 }).elemMatch('trainees', { 'trainee': traineeID }).populate('course', '_id name').exec(function(err, formations) {
    if(err) return ;
    console.log(formations);

    // to fix the array format
    var courses = formations.map(function(f){ return f.course });
    console.log(courses);

    // to delete repeated values
    courses = courses.filter((item, index, self) => self.findIndex((i) => { return i._id === item._id; }) === index);
    console.log(courses)
});

输出 - 示例:

First:
[ { course: { _id: 582f189764111029a85f77d9, name: 'Outro' } },
  { course: { _id: 581b6ff52814533153ed3790, name: 'Microsoft Excel - Bases de Dados' } },
  { course: { _id: 581b6ff52814533153ed3790, name: 'Microsoft Excel - Bases de Dados' } } ]

Second:
[ { _id: 582f189764111029a85f77d9, name: 'Outro' },
  { _id: 581b6ff52814533153ed3790, name: 'Microsoft Excel - Bases de Dados' },
  { _id: 581b6ff52814533153ed3790, name: 'Microsoft Excel - Bases de Dados' } ]

Third:
[ { _id: 582f189764111029a85f77d9, name: 'Outro' },
  { _id: 581b6ff52814533153ed3790, name: 'Microsoft Excel - Bases de Dados' } ]

有没有办法可以改善这一点,以便删除过滤线?也许是地图线?我尝试过distinct()但它不适用于字段选择。

0 个答案:

没有答案