我想从VideoSchema中按限制、偏移量和观众顺序获得类别
const CategoriesSchema = new Schema<ICategories>({
name: String,
image: String,
});
const VideoSchema = new Schema<IVideo>({
videoSource: String,
// from CategoriesSchema
category: {
name: String,
image: String,
},
viewers: Number,
});
我要做什么才能得到我想要的:
const resolver = async ({ args: { limit, offset } }) => {
// there are 60k+ categories so request will be long
const categories = await CategoriesModel.find();
for (let i = 0; i < categories.length; i++) {
const streams = await VideosModel.find({ 'category.name': categories[i].name });
categories[i] = {
...categories[i],
// count viewers of current video
viewers: streams.reduce((acc, curr) => acc + curr.viewers, 0),
};
}
// sort by viewers, slice array by limit and offset
return categories.sort(({ viewers: viewersA = 0 }, { viewers: viewersB = 0 }) => viewersB - viewersA).slice(offset, limit);
},
我知道请求没有得到优化,但我不知道如何按限制和偏移量进行请求,并按当前的浏览人数对其进行排序.我知道在像mysql这样的关系数据库中,我可以使用left-join来实现这种情况,但我不知道如何使用mongoose来实现这种功能
清理:
有一个类别列表,每个类别都有来自VideoSchema的观众数量(观众字段).如果该类别没有视频,则应该有0个观众,或者如果我们有该类别的视频,则打印观众数量,从0到2^32
此外,我在VideoSchema中进行了更改,现在它引用了类别
const VideoSchema = new Schema<IVideo>({
videoSource: String,
// from CategoriesSchema
category: {
ref: 'Categories'
},
viewers: Number,
});