如何在Model.find Sailsjs内部循环

时间:2015-08-13 02:35:16

标签: node.js sails.js async.js sails-mongo

美好的一天,有人可以建议我应该使用哪种异步功能吗? 在我的情况下,我需要输出每组的第一个成员。 ***注意这只是我的程序流程的一个例子。

/*  
    Grouplist               groupmember 
    Id | name           id |  name   | group
    1  | group1          1 |  John   |   1
    2  | group2          2 |  James  |   1   
    3  | group3          3 |  Paul   |   3
                         4 |  Angel  |   2
                         5 |  Anne   |   2
                         6 |  Jane   |   3   

    looking for output like this
        id |  name   | group
         1 |  John   |   1
         4 |  Angel  |   2   
         3 |  Paul   |   3  
*/ 
var name = [];
Grouplist.find( function(err, grouplist){

        for(var x=0;x<=grouplist.length-1; x++){
        groupmember.find({id:grouplist[x].id}).limit(1).exec(
        function callBack(err,results){
        if(err) console.log(err);
        name[x] = results.name;
        })
        }    
        })

1 个答案:

答案 0 :(得分:3)

您可以使用mongodb聚合运算符在一个查询中获得结果:

groupmember.aggregate(
   [
     {
       $group:
         {
           _id: "$group",  //grouping key
           member: { $first: "$$CURRENT" }  //return the first matched document
         }
     },
     {
        $project :   //project the document to top-level
          {     
            _id: "$member._id",
            name: "$member.name",
            group: "$member.group"
          }
    }
   ], 
   function(err, members){
       console.log(members)
   }
)