Mongodb 按评论排序,并将喜欢的放在顶部

Mongodb 按评论排序,并将喜欢的放在顶部,mongodb,meteor,iron-router,Mongodb,Meteor,Iron Router,我有一个注释数据库模式,如下所示: Comments: { postId: '', body: '', upvotedBy: [], upvotes: 0 } upvotedBy保存投票支持它的用户的用户ID。UpVoces保存评论收到的UpVoces总数。我的注释.find()如下: return Comments.find({ 'postId': this._id }, { sort: { 'submitted': -

我有一个注释数据库模式,如下所示:

Comments: {
    postId: '',
    body: '',
    upvotedBy: [],
    upvotes: 0
}
upvotedBy保存投票支持它的用户的用户ID。UpVoces保存评论收到的UpVoces总数。我的注释.find()如下:

return Comments.find({ 
    'postId': this._id 
}, { 
    sort: { 
        'submitted': -1
    }
});
因此,我正在寻找一些东西来添加到排序位,在upvotedBy数组中查找当前登录用户的Id,如果是,则以当前用户的向上投票的注释首先列出的方式对列表进行排序。这可能吗?模糊地寻找类似于:

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

一种解决方案是只获取两组文档:一组包含当前用户的注释,另一组不包含当前用户的注释。如果每个集合按提交的
排序,则只需对结果进行concat。例如:

var userId=Meteor.userId();
var sort={sort:{submitted:-1}};
var myComments=Comments.find({
posted:这个,
upvotedBy:userId
},排序)。获取();
var otherComments=Comments.find({
posted:这个,
upvotedBy:{$ne:userId}
},排序)。获取();
myComments.concat(其他评论);

噢,所以mongo会自动在数组中搜索,是吗?现在,如果我没有在find()之后添加fetch(),最后一行将抛出一个错误“模板帮助程序中的异常:TypeError:undefined不是函数”。如果我在中添加fetch(),我看不到任何结果:/2在这两种情况下都需要
fetch
,因为您需要2个数组(不是游标)。确保
返回myComments.concat(其他注释)。如果这不起作用,试着做一个
控制台。记录每个中间结果。是的,是回归。现在可以工作了,但必须以另一种方式:返回otherComments.concat(myComments)将喜欢的内容放在上面。我之前的另一个解决方法是将这两个调用作为单独的模板帮助程序,我在模板中有{{{if postsWithLikes}}和{{{{posts}}。谢谢你的帮助。