我试图让用户看到热门帖子。一般的想法是按最近的帖子(_id:-1)排序,然后按大多数upvotes(upvotes_count:-1)排序,然后限制结果(.limit(3))。这有点简化,所以请忽略“趋势帖子”的实施。
不幸的是,我无法以我想要的方式返回两种。因此,通过六个帖子的集合,它返回最近的三个,但它不会按大多数赞成对它们进行排序。例如:
帖子6(upvotes:1) 帖子5(upvotes:2) 帖子4(upvotes:1)
我希望它们像这样排序:
帖子5(upvotes:2) 帖子6(upvotes:1) 帖子4(upvotes:1)
我对领带发生的事情不是那么感兴趣,但至少,我希望那些有更多upvotes的帖子比那些upvotes更少的帖子更高。
当然,我可以编写一个方法来对它们进行排序,但肯定有一种方法可以用MongoDB来实现。
以下是我尝试实施此类型的一些方法。
var dateString = "Sat, Jan 30 @ 11:00 AM"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "YYYY EEE, MMM dd @ hh:mm a"
//let date = dateFormatter.dateFromString(dateString)
let currentDate = NSDate()
let newFormatter = NSDateFormatter()
newFormatter.dateFormat = "YYYY"
let YearString = newFormatter.stringFromDate(currentDate)
let newDateString = String(YearString + " " + dateString)
let date = dateFormatter.dateFromString(newDateString)
print(date)
没有人工作过。
答案 0 :(得分:3)
请参阅sort()
定义。
sort({_id: -1, upvotes_count: -1})
表示首先对_id
进行排序,然后仅按照相同 upvotes_count
帖子的desc顺序对_id
进行排序。不幸的是,_id
是ObjectId
,它是12字节的BSON类型,使用以下方法构建:
很难得到相同的ObjectId
。即,每个记录的_id
在本文档中应该是唯一的。因此,您的测试代码的结果仅按_id
desc。
这是一个例子,
+---------+---------------+
| _id | upvote_count |
+---------+---------------+
| 1 | 5 |
| 4 | 7 |
| 3 | 9 |
| 4 | 8 |
sort({_id: -1, upvotes_count: -1})
的结果应为
+---------+---------------+
| _id | upvote_count |
+---------+---------------+
| 4 | 8 |
| 4 | 7 |
| 3 | 9 |
| 1 | 5 |
upvote_count
将按相同的_id
排序。
然而,在这种情况下。在这种情况下存在相同的_id
。
+---------+---------------+
| _id | upvote_count |
+---------+---------------+
| 1 | 5 |
| 4 | 7 |
| 3 | 9 |
| 2 | 8 |
sort({_id: -1, upvotes_count: -1})
的结果应为
+---------+---------------+
| _id | upvote_count |
+---------+---------------+
| 1 | 5 |
| 2 | 8 |
| 3 | 9 |
| 4 | 7 |
答案 1 :(得分:2)
您可以在特定时间找到最多投票的文件
.filter(function(someVal) {
return someVal('someIds').contains(function(someId) {
return r.expr(ARRAY).contains(someId);
});
})