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