mongodb 聚合查找特征
mongodb aggregate with find features
我有一个类似于这个的模型:
{
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
});
});
});
如您所见,我正在使用 Find 然后聚合来获取我需要的信息...但我很确定有一种方法可以只使用 aggregate
但我可以找不到该怎么做...
如果需要累积每个组的全部用户信息,则需要使用$push operator for accumulation and the $$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)
我有一个类似于这个的模型:
{
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
});
});
});
如您所见,我正在使用 Find 然后聚合来获取我需要的信息...但我很确定有一种方法可以只使用 aggregate
但我可以找不到该怎么做...
如果需要累积每个组的全部用户信息,则需要使用$push operator for accumulation and the $$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)