我是javascript的新手。我想计算平均销售额(averageSales = totalSales/ numOrders)。然而,我遇到了一些困难。如果有任何帮助或指导,我将非常感激。
const averageSale = await Order.aggregate([
{
$group: {
_id: null,
totalSales: { $sum: '$totalPrice' },
numOrders: { $sum: 1 },
},
},
{$project:{totalSales:1, numOrders:1, averagesale: { $divide: ['$totalSales', '$numOrders']}}},
]);以下是我的一些文档
import express from 'express';
import expressAsyncHandler from 'express-async-handler';
import Order from '../models/orderModel.js';
import User from '../models/userModel.js';
import Product from '../models/productModel.js';
import { isAdmin, isAuth } from '../utils.js';
const orderRouter = express.Router();
orderRouter.get(
'/',
isAuth,
isAdmin,
expressAsyncHandler(async (req, res) => {
const orders = await Order.find({}).populate('user', 'name');
res.send(orders);
})
);
orderRouter.get(
'/mine',
isAuth,
expressAsyncHandler(async (req, res) => {
const orders = await Order.find({ user: req.user._id });
res.send(orders);
})
);
orderRouter.get(
'/summary',
isAuth,
isAdmin,
expressAsyncHandler(async (req, res) => {
const orders = await Order.aggregate([
{
$group: {
_id: null,
numOrders: { $sum: 1 },
totalSales: { $sum: '$totalPrice' },
},
},
]);
const users = await User.aggregate([
{
$group: {
_id: null,
numUsers: { $sum: 1 },
},
},
]);
const dailyOrders = await Order.aggregate([
{
$group: {
_id: { $dateToString: { format: '%Y-%m-%d', date: '$createdAt' } },
orders: { $sum: 1 },
sales: { $sum: '$totalPrice' },
},
},
{ $sort: { _id: 1 } },
]);
const productCategories = await Product.aggregate([
{
$group: {
_id: '$category',
count: { $sum: 1 },
},
},
]);
const productName = await Product.aggregate([
{
$group: {
_id: '$name',
count: { $sum: 1 },
},
},
]);
const productBy = await Product.aggregate([
{
$group: {
_id: '$qty',
count: { $sum: 1 },
name: { $sum: '$name' },
},
},
]);
const averageSale = await Product.aggregate([
{
$group: {
_id: null,
totalSales: { $sum: '$totalPrice' },
numOrders: { $sum: 1 },
},
},
{$project:{totalSales:1, orders:1, averagesale: { $divide: ['$totalSales', '$numOrders']}}},
]);
res.send({ users, orders, dailyOrders, productCategories, productName, productBy, averageSale });
})
);import mongoose from 'mongoose';
const orderSchema = new mongoose.Schema(
{
orderItems: [
{
name: { type: String, required: true },
qty: { type: Number, required: true },
image: { type: String, required: true },
price: { type: Number, required: true },
product: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
required: true,
},
},
],
shippingAddress: {
fullName: { type: String, required: true },
address: { type: String, required: true },
city: { type: String, required: true },
postalCode: { type: String, required: true },
country: { type: String, required: true },
},
paymentMethod: { type: String, required: true },
paymentResult: {
id: String,
status: String,
update_time: String,
email_address: String,
},
itemsPrice: { type: Number, required: true },
shippingPrice: { type: Number, required: true },
taxPrice: { type: Number, required: true },
totalPrice: { type: Number, required: true },
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
isPaid: { type: Boolean, default: false },
paidAt: { type: Date },
isDelivered: { type: Boolean, default: false },
deliveredAt: { type: Date },
},
{
timestamps: true,
}
);
const Order = mongoose.model('Order', orderSchema);
export default Order;发布于 2021-07-14 14:32:31
我假设你正在尝试找到平均销售价格,没有必要使用$divide,因为$avg可以完成这项工作。
如果这不是你要找的,我可以知道你说的calculate the average number of sales (averageSales = totalSales/ numOrders)是什么意思吗?
db.collection.aggregate({
"$group": {
"_id": null,
"totalSales": {
$sum: "$totalPrice"
},
"numOrders": {
$sum: 1
},
"avgPrice": {
"$avg": "$totalPrice"
}
}
})https://stackoverflow.com/questions/68371386
复制相似问题