在express/handlebars/mongoose中计算某个值的对象的属性
问题描述:
在express/handlebars/mongoose中创建好友系统。我使用{{friends.length}}来显示用户拥有的朋友总数,但我将如何显示朋友的总类型。例如。在express/handlebars/mongoose中计算某个值的对象的属性
如何的那些朋友多有0状态或1
0 =待定 1 =朋友
如何获得每个通蒙戈/猫鼬计数?
var UserSchema = new Schema({
username : String,
\t friends : [{ id: { type: Schema.Types.ObjectId, ref: 'User'}, status: Number }]
});
app.get('/:username/friends', function(req, res) {
User
.findOne({ username: req.params.username }, 'username friends')
.populate({
path: 'friends.id',
model: 'User',
select: 'username'
})
.exec(function(err, user) {
res.render('friends', user) \t \t \t
})
});
{
"_id" : ObjectId("590ac6b7663350948be1c085"),
"username" : "some username",
"friends" : [
{
"id" : ObjectId("590ac6ac663350948be1c083"),
"status" : 1,
"_id" : ObjectId("590ace171aa0aeb58f798466")
}
]
}
答
如果我正确理解你,你的所有朋友阵列,因此您可以使用过滤器是:
friendsType1 = friends.filter(friend=>friend.satatus===0);
friendsType2 = friends.filter(friend=>friend.satatus===1);
friendsType1.length;//total count friends with status 0
friendsType2.length//total count friends with status 1
下UserSchema你可以申报方式:
//find friends with status 1
UserSchema.statics.findFriends = function (username, clb){
mongoose.models.User
.findOne({ username: req.params.username }, 'username friends')
.populate({
path: 'friends.id',
model: 'User',
select: 'username'
})
.exec(function(err, user) {
if(err) return clb(err);
var result = user.friends.filter(friend=>friend.satatus===1);
clb(null, result);
})
}
然后你可以使用它像这样:
app.get('/:username/friends', function(req, res) {
User.findFriends(req.params.username, function(err, users){
if(err) throw err;
res.render('friends', users);
});
});
我怎么能做到这一点与猫鼬,而不是JS? – totalnoob
您可以为用户模式编写方法。 User.methods.findFriends = (status)=> {...}; – Sergaros
不错!如果你可以更新你的答案,我会选择你的。谢谢 – totalnoob