【发布时间】:2021-06-21 15:14:20
【问题描述】:
我有四个收藏mixed, organic, upcycle, vegan
这些都有相同的字段:
// scheme
const productsSchema = new Schema({
_id: Schema.Types.ObjectId,
kind: {
"upcycle": Boolean,
"organic": Boolean,
"vegan": Boolean
},
koLCategory: String,
enLCategory: String,
sCategory: String,
koBrandName: String,
enBrandName: String,
productName: String,
thumbNail: String,
originPrice: String,
discountPrice: String,
url: String,
soldout: Boolean
});
const mixedModel = products_conn.model('products', productsSchema, 'mixed');
const organicModel = products_conn.model('products', productsSchema, 'organic');
const upcycleModel = products_conn.model('products', productsSchema, 'upcycle');
const veganModel = products_conn.model('products', productsSchema, 'vegan');
module.exports = {
mixedModel,
organicModel,
upcycleModel,
veganModel
};
我想做的是制作分页 REST API。 这段代码只是实现了 REST API(不是分页)
router.route('/category/outer/all').get((req, res) => {
const upcycle = upcycleModel.aggregate([
{"$match": {"soldout": false, "koLCategory": "keyword"}},
{"$project":
{
"_id": 0,
"soldout": 0,
}
}
]);
const organic = organicModel.aggregate([
{"$match": {"soldout": false, "koLCategory": "keyword"}},
{"$project":
{
"_id": 0,
"soldout": 0,
}
}
]);
const vegan = veganModel.aggregate([
{"$match": {"soldout": false, "koLCategory": "keyword"}},
{"$project":
{
"_id": 0,
"soldout": 0,
}
}
]);
const mixed = mixedModel.aggregate([
{"$match": {"soldout": false, "koLCategory": "keyword"}},
{"$project":
{
"_id": 0,
"soldout": 0,
}
}
]);
Promise.all([
upcycle,
organic,
vegan,
mixed
]).then(data => res.json({
product: {
totalCnt: data[0].length + data[1].length + data[2].length + data[3].length,
items: data[0].concat(data[1]).concat(data[2]).concat(data[3])
}
})).catch(err => res.status(400).json('Error: ' + err));
});
在这种情况下,如何生成 REST API 分页?
我知道,将所有数据推送到一个集合中并仅使用 skip, limit 非常简单。
但为了更有效地管理数据,我根据类别值分离集合。
除了将所有数据推送到一个集合中之外,还有其他解决方案吗?
【问题讨论】:
标签: mongodb express pagination