我有以下销售模型
const mongoose = require('mongoose');
const SaleSchema = new mongoose.Schema({
tickets: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Ticket',
required: true,
},
],
total: {
type: Number,
required: true,
},
createdAt: {
type: Date,
default: Date.now,
},
});
const Sale = mongoose.model('Sale', SaleSchema);
module.exports = Sale;
字符串
我想找到我所有的销售额并累计总资产。所以我想计算所有销售的总收入。
这是我的方法:
//@desc Get the total amount of all sales
//@method GET
//@access Private
exports.getTotalSales = asyncHandler(async (req, res, next) => {
const sales = await Sale.find();
if (!sales) {
return next(new ErrorResponse(`No sales found`));
}
let total = 0;
sales.forEach((sale) => {
total += sale.total;
});
console.log(total);
res.status(200).json({
success: true,
total,
});
});
型
直到昨天我的方法工作正常,但现在我在我的React如下:
success: true,
total: null
型
我有控制台记录total
,我得到NaN
,但我所有的销售总额作为数字,而不是作为字符串或其他类型的数据。
我没有改变我的方法,逻辑似乎是好的。为什么我的总数为零?
1条答案
按热度按时间mfuanj7w1#
对我来说,这看起来像是有人在你的集合中偷偷地放了一个文档,其中的
total
属性不是一个数字。当试图查询文档时,mongoose试图将此文档解析为一个数字,但无法这样做,结果是NaN
。当尝试对这些值求和时,任何与
NaN
求和的结果都是NaN
,这将显示这种确切的行为。也许你可以检查你的收藏中是否有任何不符合你的模式的文档,例如。将
total
属性设置为不同于数字的任何值。您的MongoDB集合不会在意,所以我猜这肯定是这里的根本原因。