我有一条路由可以处理某个用户的发帖请求。我希望每个请求都提供与给定作者匹配的最新25个帖子,而在下一个请求中,之后再提供25个帖子。到目前为止,我的代码:
router.get('/profile/:id', (req, res) => {
Post.find({'author': req.params.id})
.skip(req.query.skip)
.limit(25)
.populate({
path: 'author',
select: 'firstName lastName img'
}).then(
posts =>{
res.json({posts: modifyPosts(posts, req.user._id)})
}
).catch(
err => {
console.log(err)
res.json({err: err})
}
)
})
我想先提供最新的帖子,然后再将较旧的文档提供给客户。在每个请求之前,“ req.query.skip”在客户端增加。如果我正确理解,则添加.sort(“ date”)方法仍将返回相同的25个文档。我编写的代码总是首先返回最早的25个文档,所以我想我基本上是在寻找一个选项,该选项可以让我从下往上搜索数据库。
答案 0 :(得分:2)
如果要首先获取最新帖子,则需要在猫鼬查询中使用 import java.awt.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Student> studs = new ArrayList<Student>();
for (int i = 1;i < 3;i++) { //Here the for loop
System.out.println("Enter age and name :");
int age = sc.nextInt();
//nextInt does not account for the enter that you press when you submit the int so you have to catch the unused enter keystroke
sc.nextLine();
String name = sc.nextLine();
Student stu1 = new Student(age, name);
age = sc.nextInt();
sc.nextLine();
name = sc.nextLine();
System.out.println("Enter age and name :");
Student stu2 = new Student(age, name);
studs.add(stu1);
studs.add(stu2);
Collections.sort(studs,new StudAge());
}
for(Student stud : studs) {
System.out.println(stud);
}
}
}
或.sort({ date: -1 })
。
已更新
如果您使用的是.sort('-date')
,则排序应在内部填充。
.populate()
答案 1 :(得分:0)
您可以在GET请求API中执行以下操作:
db.collection.find().sort({ _id: -1 }, function(err, docs){
console.log(docs);
res.json(docs);
});
希望这会有所帮助!谢谢。