Javascript 添加与用户ID匹配的文档总数
我正在尝试获得与单个用户匹配的总订单 这是我的订单模式:Javascript 添加与用户ID匹配的文档总数,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我正在尝试获得与单个用户匹配的总订单 这是我的订单模式: const OrderSchema = new Schema({ lineItems: [{ product: { type: Schema.Types.ObjectId, ref: "Product" }, quantity: { type: Number } }], creat
const OrderSchema = new Schema({
lineItems: [{
product: {
type: Schema.Types.ObjectId,
ref: "Product"
},
quantity: {
type: Number
}
}],
created_at: {
type: Date,
default: Date.now
},
user: [{
type: Schema.Types.ObjectId,
ref: "User",
required: true
}]
});
以下是我的猫鼬查询:
getOrderTotal: function (req, res) {
const userID = req.params.userid;
Order
.aggregate([
{ $match: { 'user': mongoose.Types.ObjectId(userID) } },
{
$lookup: {
from: "products",
localField: "lineItems.product",
foreignField: "_id",
as: "product"
}
},
{
$unwind: "$product",
},
{
$unwind: "$lineItems"
},
{
$group: {
_id: mongoose.Types.ObjectId(userID),
count: { $sum: 1 }
}
}
])
.then(dbModel => res.json(dbModel))
.catch(err => res.status(422).json(err));
}
我测试的每个用户,count字段总是返回72的值。db中甚至没有总共72个订单。当我将1值更改为不同的数字时,它会返回72的倍数,即2返回144,0.5返回36。$unwind会造成此问题。请提供用于解决查询的数据。$unwind是如何产生问题的?当您使用lookup stag查找产品时,它们会给出一些结果,当您解开这些结果时,它们会变成很多结果,然后再次解开给很多文档。现在您必须使用group两次。我使用$unwind,这样我还可以获得有关产品的信息,以计算一个用户产生的总收入。在为一个用户获取全部订单的同时,是否有办法做到这一点?您需要进行分组或匹配,以再次获得风数据的所需结果。