我试图使用mongoose paginate通过一个数组的值分页。
class subNotes {
@Prop()
Note: string;
@Prop()
Date: Date;
}
@Schema()
class Travel extends Document {
@Prop()
Country: string;
@Prop()
Recommendation: string;
@Prop()
Level: number;
@Prop()
LevelDescr: string;
@Prop()
Date: Date;
@Prop()
Notes: [subNotes];
}
export const TravelSchema = SchemaFactory.createForClass(Travel); mysql. println(mysql);因此,subnotes是每周更新,将有很多信息,我想分页的服务sice。为此,我在控制器中提供了apage和limit之类的参数
async createSlugs(
@Query('page') page = 1,
@Query('limit') limit = 10,
@Param('country') country: string,
) {
limit = limit > 100 ? 100 : limit;
return await this.travelService.getTravelInfo(
{
limit: Number(limit),
page: Number(page),
},
country,
);
}
}
在服务上,我将我的文档作为分页模型注入,并尝试像这样实现服务:
async getTravelInfo(page = 1, limit = 10, country: string) {
await this.saveTravelInfo(country);
const options = {
page: Number(page),
limit: Number(limit),
};
return await this.notesModel.paginate({ Country: country }, options);
}
然而,分页没有做任何事情,整个国家的数据被选中。有线索吗?
async getTravelInfo(page = 1, limit = 10, country: string) {
await this.saveTravelInfo(country);
const options = {
populate: 'subNotes',
page: Number(page),
limit: Number(limit),
};
console.log(options);
return await this.notesModel.paginate({ Country: country }, options);
}
所以limit基本上就是复制我的子音符里面的内容。如果我输入Limit 1,则返回所有内容,即200个文档。如果输入Limit 2,则返回400个文档。:|
3条答案
按热度按时间rbl8hiat1#
所以看看这个,我做了这个包,使键集分页的实现在nestjs与mongoose简单🙂
https://www.npmjs.com/package/nestjs-keyset-paginator
i7uaboj42#
您可以使用mongoose-paginate-plugin实现此功能。
一个可能的起点;
这个解决方案有点像黑客,但你可以在它的基础上进行构建,并适应你的用例。
请记住将插件添加到您的模式中。
npm i mongoose-paginate-v2
zaqlnxep3#
以下是在Nest JS中使用
mongoose-paginate-v2
的步骤...在这里,我以Category模块为例……
category.module.ts
在中使用
import { PaginateModel } from 'mongoose'
,而不是在category.service.ts
中使用import { Model } from 'mongoose'
下面是相同的实体文件...在这个文件中使用
CategorySchema.plugin(mongoosePaginate);
,这样它将给予mongoosePaginate中可用的功能。