2017-05-04 5 views
0

Création d'un système d'amis dans express/handlebars/mongoose. J'utilise {{friends.length}} pour afficher le nombre total d'amis d'un utilisateur, mais comment afficher le nombre total d'amis. par exemple.Comptage des propriétés d'un objet d'une certaine valeur dans express/handlebars/mongoose

combien de ces amis ont le statut de 0 ou 1.

0 = en attente 1 = amis

Comment puis-je obtenir le nombre de chacun à travers mongo/mangouste?

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

Répondre

1

Si je comprends bien, vous, vous avez tableau de tous les amis que vous pouvez utiliser le filtre pour elle:

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 

Sous UserSchema vous pouvez déclarer des méthodes:

//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);   
    }) 
} 

Ensuite, vous pouvez l'utiliser comme ceci:

app.get('/:username/friends', function(req, res) { 
    User.findFriends(req.params.username, function(err, users){ 
    if(err) throw err; 
    res.render('friends', users); 
    }); 
}); 
+0

comment puis-je faire avec mangouste plutôt que js? – totalnoob

+0

Vous pouvez écrire une méthode pour le schéma utilisateur. User.methods.findFriends = (status) => {...}; – Sergaros

+0

sympa! Si vous pouvez mettre votre réponse à jour, je choisirai la vôtre. merci – totalnoob