我希望从我的User模型中检索几个信息,它看起来像这样:
var userSchema = new mongoose.Schema({
email: { type: String, unique: true, lowercase: true },
password: String,
created_at: Date,
updated_at: Date,
genre : { type: String, enum: ['Teacher', 'Student', 'Guest'] },
role : { type: String, enum: ['user', 'admin'], default: 'user' },
active : { type: Boolean, default: false },
profile: {
name : { type: String, default: '' },
headline : { type: String, default: '' },
description : { type: String, default: '' },
gender : { type: String, default: '' },
ethnicity : { type: String, default: '' },
age : { type: String, default: '' }
},
contacts : {
email : { type: String, default: '' },
phone : { type: String, default: '' },
website : { type: String, default: '' }
},
location : {
formattedAddress : { type: String, default: '' },
country : { type: String, default: '' },
countryCode : { type: String, default: '' },
state : { type: String, default: '' },
city : { type: String, default: '' },
postcode : { type: String, default: '' },
lat : { type: String, default: '' },
lng : { type: String, default: '' }
}
});
在主页上,我有一个筛选器用于地点,您可以浏览来自国家或城市的用户。
所有字段中也包含了该地区的用户数量:
United Kingdom
All Cities (300)
London (150)
Liverpool (80)
Manchester (70)
France
All Cities (50)
Paris (30)
Lille (20)
Nederland
All Cities (10)
Amsterdam (10)
Etc...
这是主页,然后我还有学生和教师页面,我希望在那些国家和城市中只提供关于有多少老师的信息......
我想要做的是创建一个查询来检索所有这些信息并进行单个查询。
目前,查询看起来像这样:
User.aggregate([
{
$group: {
_id: { city: '$location.city', country: '$location.country', genre: '$genre' },
count: { $sum: 1 }
}
},
{
$group: {
_id: '$_id.country',
count: { $sum: '$count' },
cities: {
$push: {
city: '$_id.city',
count: '$count'
}
},
genres: {
$push: {
genre: '$_id.genre',
count: '$count'
}
}
}
}
], function(err, results) {
if (err) return next();
res.json({
res: results
});
});
问题在于我不知道如何获取所需的所有信息。
- 我不知道如何获取每个国家中总用户数量的长度。
- 我已经拥有每个国家的用户数量长度。
- 我已经拥有每个城市的用户数量长度。
- 我不知道如何获取特定性别的相同信息。
在Mongo中是否可能用单个查询获得所有这些信息?
否则:
使用2、3个不同的Mongo请求创建几个Promise,如下所示:
getSomething
.then(getSomethingElse)
.then(getSomethingElseAgain)
.done
我确信每次指定数据存储会更容易,但是:当数据库中有5000/10000个以上的用户时,这对性能有好处吗?
抱歉,我还在学习过程中,我认为理解MongoDB性能/优化非常关键。
谢谢。