>我在mongodb中遇到聚合问题,因为我对结果进行分组并将其求和,并将归档文件加倍并放在错误或空值上,我返回0
但输出NaN
。
let $match= {
$and:[{
status:{ $in:['Completed'] }
},{
type:0
}, {
"price": { "$exists": true, "$ne": null }
},{
"invoice_value": {
"$exists": true, "$ne": null
}
}]
};
if(Object.keys(query).length>0){
console.log(query);
$match.$and.push(query);
}
try {
const res = await Order.aggregate([
{ $match },
{
$group: {
_id: null,
Prices: {
$sum: {
$convert:
{
input: '$price',
to: 'double',
onError: 0,
onNull: 0
}
}
},
Invoices: {
$sum: {
$convert:
{
input: '$invoice_value',
to: 'double',
onError: 0,
onNull: 0
}
}
},
count: {
$sum: 1
}
}
}
])
}catch (e) {
console.error(e);
}
输出:
[{
_id: null,
Prices: NaN,
Invoices: 834565.92,
count: 25211
}]
您在此处提供的证据不足以解决问题。
Prices
和Invoices
的计算是相同的,所以应该不是问题。
唯一剩下的部分是数据 - 其中一定有什么东西导致了它。如果数据集很大,您可以尝试使用较小的数据集运行它,以验证您的代码是否正确。
您可以尝试二进制切碎方法 (https://en.wikipedia.org/wiki/Binary_search_algorithm)。获取一半的数据并运行它。如果问题没有出现,则表示问题出在数据的另一半。如果仍然出现,请再次减半数据,然后重复此过程,直到它正常工作。
在它开始工作的那一刻,你知道问题出在数据的另一半,所以回到那一半,再说一半。我希望这对你有意义。这是确定导致问题的记录的有效方法。