我有这种情况。我需要记录总数。然后应用过滤器,然后我需要过滤产品和过滤产品的数量。
以下是我查询:
let result = await Product.aggregate([
{ $group: { _id: null, totalRecords: { $sum: 1 } } },
{ $match: queries },
{ $group: { _id: null, filteredRecords: { $sum: 1 } } },
{ $project: {
name: 1,
description: 1,
smallImage: 1,
rPriceTM: 1,
discount: 1,
discountRate: 1,
dPriceTM: 1,
isNewProduct: 1
} },
{ $sort: { _id: -1 } },
{ $skip: (currentPage - 1) * productsPerPage },
{ $limit: productsPerPage }
])
结果:[ { _id: null } ]
如果我省略{ $group: {} }
阶段,它工作正常;这个查询给了我一个经过过滤的产品数组。
请帮助我改进查询。
1条答案
按热度按时间bxfogqkk1#
当前查询不起作用的原因是管道中的阶段是依赖的,这意味着阶段将基于从前一阶段返回的结果执行操作。
对于您的场景,您需要单独/多个管道来计算
totalRecords
、filteredRecords
和data
。因此,需要$facet
阶段。在最后一个阶段,您需要$project
阶段来装饰从$facet
阶段返回的结果的最终输出文档。Demo @ Mongo Playground