Node.js 如何在mongoose中的一个函数调用中获取所有子文档?

Node.js 如何在mongoose中的一个函数调用中获取所有子文档?,node.js,mongoose,pagination,Node.js,Mongoose,Pagination,我有一个这样的数据库模式-- 我只是制作了一个简单的分页api,用于逐页获取所有用户的所有帖子。 我现在查询数据库的方式是这样的-- 这让我得到了这样的帖子-- 我不确定在这种情况下如何分页,我想以这种格式检索posts-- 我知道关于我要问的问题,这还不够充分,但我认为程序员足够聪明,只需要一点就可以理解问题,因为我是个初学者,我不知道是否有比这更好的解决方案。。。更好的分页解决方案将不胜感激。 :)使用mongo这是一个非常经典的问题-你不知道要获得多少用户对象,最终总共会有10篇文章。如果

我有一个这样的数据库模式--

我只是制作了一个简单的分页api,用于逐页获取所有用户的所有帖子。 我现在查询数据库的方式是这样的--

这让我得到了这样的帖子--

我不确定在这种情况下如何分页,我想以这种格式检索
posts
--

我知道关于我要问的问题,这还不够充分,但我认为程序员足够聪明,只需要一点就可以理解问题,因为我是个初学者,我不知道是否有比这更好的解决方案。。。更好的分页解决方案将不胜感激。
:)

使用mongo这是一个非常经典的问题-你不知道要获得多少用户对象,最终总共会有10篇文章。如果你有10个用户,并且每个用户都有0到10篇文章,那么你将有0到100篇文章,而不是你想要分页的10篇文章。根据我的经验,这不是一个“查找”可以解决的问题。您可以使用mongo聚合、在帖子上展开、按参数排序(
time
最有可能),然后跳过并限制以获得分页结果。
const schema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    min: 3,
    max: 100,
  },
  email: {
    type: String,
    required: true,
    min: 5,
  },
  picture: {
    type: String,
    required: true,
    trim: true,
  },
  provider: {
    type: String,
    required: true,
  },
  joined: {
    type: Date,
    default: Date.now,
  },
  posts: [
    {
      title: {
        type: String,
        required: true,
      },
      description: {
        type: String,
        required: true,
      },
      tags: {
        type: Array,
        default: [],
        max: 5,
      },
      time: {
        type: Date,
        default: Date.now,
      },
      upvotes: {
        type: Number,
        default: 0,
      },
      downvotes: {
        type: Number,
        default: 0,
      },
    },
  ],
});
 User.find({}, "posts -_id", (err, docs) => {
    if (err) return res.sendStatus(500);

    // Docs found, serve to the user
    res.json(docs);
  });
[
{...User object but only with `posts` field like -- "posts" : [{...}, {...}, {...}] },
{...User object but only with `posts` field like -- "posts" : [{...}, {...}, {...}] },
{...User object but only with `posts` field like -- "posts" : [{...}, {...}, {...}] },
{...User object but only with `posts` field like -- "posts" : [{...}, {...}, {...}] },
]
[
// First 10 posts in the database
{...single post}, 
{...single post},
{...single post}
]