2015-01-01 95 views
0

我有類似這樣的一個模型:與find MongoDB的總擁有

{ 
    email: String, 
    name: String, 
    role: String, 
    location: { 
    country: String, 
    city: String 
    }, 
    contacts: { 
    email: String, 
    phone: String 
    } 
} 

我需要在我的視圖來顯示整個用戶的信息,但我想包括也有多少用戶從一個國家也有。

使用aggregate我不知道如何讓全部用戶通過我創建的組。

因此,在我在做什麼的那一刻是這樣的:

User.find({}, function(err, users) { 
    User.aggregate([ 
    { $group: { _id: { country: '$location.country' }, count: { $sum: 1 }}} 
    ], function(err, results) { 
    res.render('home', { 
     users: users, 
     countries: results 
    }); 
    }); 
}); 

正如你可以看到我使用的查找,然後彙總兩全我需要的信息......但我敢確定有一種方法可以只使用aggregate但我找不到如何做到這一點...

+0

如果我得到你的權利,你想限制數據返回,你可能想看看[$ project](http://docs.mongodb.org/manual/reference/operator/aggregation/project/)。 –

回答

1

如果您需要累積每個組的整個用戶信息,那麼您需要使用$push運算符進行累加和$$ROOT系統變量來訪問整個用戶信息。

User.aggregate([ 
{$group:{"_id":{"country":"$location.country"}, 
     "users":{$push:"$$ROOT"}, 
     "count":{$sum:1}}} 
],callback) 

如果你想積累用戶信息文件的只有特定的領域,你可以只推一樣必填字段:

User.aggregate([ 
{$group:{"_id":{"country":"$location.country"}, 
     "users":{$push:{"email":"$email","name":"$name"}}, 
     "count":{$sum:1}}} 
],callback)