2

我用的功能.populate()得到equipements通过category分组,所以我的模型是这样的如何使用功能填入()正确

enter image description here

var mongoose = require('../config/db'); 
var EquipementSchema = mongoose.Schema({ 
    libelle: String, 
    marque: String, 
    category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' } 
}); 

module.exports = mongoose.model('Equipement', EquipementSchema); 

路线:

router.get('/categorie_id', function(req, res, next){ 
    models.equipement.aggregate([ 
     { 
      $group : { 
       _id : '$categorie_id', 
       equipements: { $push: '$$ROOT' } 
      } 
     } 
    ].exec(function(err , results){ 

     if(err) res.json({error: err}); 
     res.json(results); 
    })); 
}); 

enter image description here

results为空,当我用邮差

enter image description here

,当我用cmd它的工作原理:

enter image description here

谁能帮助?

回答

0

你有一个错字在你的代码在这里:

router.get('/categorie_id', function(req, res, next){ 
    models.equipement.aggregate([ 
     { 
      $group : { 
       _id : '$categorie_id', 
       equipements: { $push: '$$ROOT' } 
      } 
     } 
    ].exec(function(err , results){ // <-- typo here: missing a closing bracket after the pipeline array 

     if(err) res.json({error: err}); 
     res.json(results); 
    })); 
}); 

这应该是

router.get('/categorie_id', function(req, res, next){ 
    models.equipement.aggregate([ 
     { 
      "$group": { 
       "_id": "$categorie_id", 
       "equipements": { "$push": "$$ROOT" } 
      } 
     } 
    ]).exec(function(err, results){ 
     if(err) res.json({error: err}); 
     res.json(results); 
    }); 
}); 

使用Model.populate()功能来填充文件的引用,修正总管道查询之后。使用results阵列来填充_id路径:

router.get('/categorie_id', function(req, res, next){ 
    models.equipement.aggregate([ 
     { 
      "$group": { 
       "_id": "$categorie_id", 
       "equipements": { "$push": "$$ROOT" } 
      } 
     } 
    ]).exec(function(err, results){ 
     if (err) res.json({error: err}); 
     models.equipement.populate(results, { "path": "_id" }, function(err, result) { 
      if(err) res.json({error: err}); 
      console.log(result); 
      res.json(result); 
     }); 
    }); 
});