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,这样我还可以获得有关产品的信息,以计算一个用户产生的总收入。在为一个用户获取全部订单的同时,是否有办法做到这一点?您需要进行分组或匹配,以再次获得风数据的所需结果。