有数百个项目,每个项目都包含评论。每个评论包含作者,内容,喜欢,回复。由于每个条目可能有数百条注解,我将注解的id嵌入到条目文档的子数组中。
const itemSchema = new mongoose.Schema(
{
name: {
type: String,
required: true,
trim: true,
index: true,
},
author: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: "Comment" }],
},
{ timestamps: true }
);
const commentSchema = new mongoose.Schema(
{
author: {
type: mongoose.Schema.Types.ObjectId,
ref: User,
required: true,
},
content: {
type: String,
required: true,
trim: true,
},
likes: {
type: [{ type: mongoose.Schema.Types.ObjectId, ref: User }],
default: Array,
},
replies: { type: [this], default: Array },
},
{ timestamps: true }
);
当我获取一个项目时,我将为该项目加载10条最新评论。在客户端,有加载更多按钮。用户每次点击它,它都会加载10个以前的评论。我如何在Express.js中使用mongoose实现这一点呢?
2条答案
按热度按时间ljsrvy3e1#
如果comment对象中不存在createdAt,则可以跳过排序管道。
sqyvllje2#
如果注解是排序的,你可以简单地使用
$slice
:其中pageSize = 10在您的情况下。
如果注解没有排序,可以使用管道
$sortArray
进行排序。对于当前的mongoDB版本,没有理由再次使用$unwind
和$group
。