我试图获取与管道运算符匹配的文档总数,然后在获得所有计数之后,我想使用$skip
和$limit
返回一个子集,用于分页。现在,我基本上进行了两次相同的汇总-一次获取所有匹配项的计数,一次进行跳过/限制。 可以使用一个聚合管道来完成此操作吗?
要获得我的计数
let [count] = await MyModel.aggregate([
{
$match: {
store: mongoose.Types.ObjectId(storeId),
},
},
{
$lookup: {
from: "resaleitems",
let: {
store: "$store",
},
as: "itemsForSale",
pipeline: [
{
$match: {
$expr: {
$eq: ["$store", "$$store"],
},
},
},
],
},
},
{
$match: {
"itemsForSale.0": { $exists: true },
},
},
{ $count: "totalCount" },
]).exec();
然后在获得跳过的有限结果之后,我基本上做了相同的事情,但是添加了$ skip和$ limit步骤
let items = await MyModel.aggregate([
{
$match: {
store: mongoose.Types.ObjectId(storeId),
},
},
{ $skip: skip.toNumber() },
{ $limit: bnLimit.toNumber() },
{
$lookup: {
from: "resaleitems",
let: {
store: "$store",
},
as: "itemsForSale",
pipeline: [
{
$match: {
$expr: {
$eq: ["$store", "$$store"],
},
},
},
],
},
},
{
$match: {
"itemsForSale.0": { $exists: true },
},
},
]).exec();