0

在 express/handlebars/mongoose 中创建好友系统。我正在使用 {{friends.length}} 来显示用户拥有的朋友总数,但我将如何显示朋友的总类型。例如。

其中有多少朋友的状态为 0 或 1。

0 = 待处理 1 = 朋友

如何通过 mongo/mongoose 获取每个的计数?

var UserSchema = new Schema({
    username   : String,
	  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)			
  })
});

    {
        "_id" : ObjectId("590ac6b7663350948be1c085"),
        "username" : "some username", 
        "friends" : [ 
            {
                "id" : ObjectId("590ac6ac663350948be1c083"),
                "status" : 1,
                "_id" : ObjectId("590ace171aa0aeb58f798466")
            }
        ]
    }

4

1 回答 1

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);
  });   
});
于 2017-05-08T06:34:17.603 回答