gpt4 book ai didi

javascript - 当前聚合的 MongoDB Node Driver Count

转载 作者:IT老高 更新时间:2023-10-28 12:31:26 25 4
gpt4 key购买 nike

我正在将 mongodb 用于 Node ,并尝试根据一些设置的过滤器聚合文档集合,然后将其限制为 10。我将它聚合得很好,限制得很好,但我需要得到总数在将文档限制为 10 个之前汇总文档。

这是我的代码。

var qry = [];
if (filter.FocusArea && filter.FocusArea != "(None)") {
qry.push({
$match: { 'ProgramAreaId': filter.FocusArea }
});
}
if (filter.Status && filter.Status != "(None)") {
qry.push({
$match: { 'StatusId': filter.Status }
});
}
if (filter.ProgOfficer && filter.ProgOfficer != "(None)") {
qry.push({
$match: { 'ProgramOfficerId': filter.ProgOfficer }
});
}
if (filter.Fund && filter.Fund != "(None)") {
qry.push({
$match: { 'FundId': filter.Fund }
});
}

var skipNbr = (parseInt(filter.Page) * 10 - 10);
qry.push({ $project: { _id: '$_id', count: { $sum: '$$ROOT' }, content: '$$ROOT'} }) // I would like to do the count here.
qry.push({ $skip: skipNbr })
qry.push({ $limit: 10 })
var apps = mongo.collection('Applications').aggregate(qry, function(err, docs) {
callback(docs);
});

这可以在一个聚合查询中完成还是需要分成两个?

最佳答案

可以在单个查询中执行此操作。

您可以使用 $project 将过滤后的数组投影到两个不同的字段中:一个带有内容,一个带有计数。

您可以使用 $slice 来限制内容数组。

 db.collection.aggregate([
{
$match: {} // Filter
},
{
$group: {
_id: 1,
array: {$push: '$$ROOT'}
}
},
{
$project: {
content: {
$slice: ['$array', skip, limit]
},
total: {
$size: '$array'
}
}
}
], {allowDiskUse: true})

关于javascript - 当前聚合的 MongoDB Node Driver Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com