【发布时间】:2016-05-03 19:41:50
【问题描述】:
我试图让用户看到热门帖子。一般的想法是按最近的帖子排序(_id:-1),然后按最多的投票(upvotes_count:-1)排序,然后限制结果(.limit(3))。这有点简化,所以请忽略这种“热门帖子”的实现。
不幸的是,我无法以我想要的方式返回两种。因此,对于六个帖子的集合,它会返回最近的三个帖子,但不会按最多的投票对它们进行排序。例如:
发布 6(点赞:1) 帖子 5(点赞数:2) 发布 4(点赞:1)
我希望它们像这样排序:
发布 5(点赞数:2) 帖子 6(点赞数:1) 发布 4(点赞:1)
我对平局的结果不太感兴趣,但至少,我希望获得更多支持的帖子比支持更少的帖子排名更高。
当然,我可以编写一种方法来对它们进行排序,但肯定有一种方法可以使用 MongoDB 来做到这一点。
以下是我尝试实现这种排序的一些方法。
// Use sort for date and then use it again for upvotes_count
Post.find()
.sort({_id: -1})
.sort({upvotes_count: -1})
.limit(3)
.exec( function(err, posts) {
if (err) res.send(err);
console.log(posts);
res.json(posts);
});
// Use sort for date, limit the results to three, and then
// use it again for upvotes_count
Post.find()
.sort({_id: -1})
.limit(3)
.sort({upvotes_count: -1})
.exec( function(err, posts) {
if (err) res.send(err)
console.log(posts);
res.json(posts);
});
// Use sort for date and upvotes_count in one step.
Post.find()
.sort({_id: -1, upvotes_count: -1})
.limit(3)
.exec( function(err, posts) {
if (err) res.send(err);
console.log(posts);
res.json(posts);
});
没有一个有效。
【问题讨论】:
标签: node.js mongodb sorting mean database