2017-05-04 68 views
0

在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") 
 
      } 
 
     ] 
 
    }

回答

1

如果我正确理解你,你的所有朋友阵列,因此您可以使用过滤器是:

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); 
    }); 
}); 
+0

我怎么能做到这一点与猫鼬,而不是JS? – totalnoob

+0

您可以为用户模式编写方法。 User.methods.findFriends = (status)=> {...}; – Sergaros

+0

不错!如果你可以更新你的答案,我会选择你的。谢谢 – totalnoob

相关问题