我可以反向查询MongoDB吗?

时间:2018-06-21 02:40:28

标签: mongodb mongoose

我有一条路由可以处理某个用户的发帖请求。我希望每个请求都提供与给定作者匹配的最新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个文档,所以我想我基本上是在寻找一个选项,该选项可以让我从下往上搜索数据库。

2 个答案:

答案 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);
        });

希望这会有所帮助!谢谢。