按评论排序并在顶部放置喜欢的评论

时间:2014-09-03 04:10:10

标签: mongodb meteor iron-router

我有一个像这样的评论数据库模式:

Comments: {
    postId: '',
    body: '',
    upvotedBy: [],
    upvotes: 0
}

upvotedBy持有赞成它的用户的UserIds。 Upvotes持有评论收到的总票数。我的Comments.find()如下:

return Comments.find({ 
    'postId': this._id 
}, { 
    sort: { 
        'submitted': -1
    }
});

所以我正在寻找要添加到排序位的东西,在upvotedBy数组中查找当前登录用户的Id,如果是,请将列表排序为当前的upvoted注释用户首先列出。这可能吗?寻找含糊不清的东西:

..
    sort: { 
        'submitted': -1,
        'upvotedBy' as upvotedByUser: checkIfInArray(userId)
    }
..

1 个答案:

答案 0 :(得分:0)

一种解决方案就是获取两组文档:包含当前用户注释的文档和不包含当前用户注释的文档。如果每个集都按submitted排序,那么您只需要连接结果。例如:

var userId = Meteor.userId();
var sort = {sort: {submitted: -1}};

var myComments = Comments.find({
  postId: this._id,
  upvotedBy: userId
}, sort).fetch();

var otherComments = Comments.find({
  postId: this._id,
  upvotedBy: {$ne: userId}
}, sort).fetch();

myComments.concat(otherComments);