猫鼬聚合,匹配两个日期间隔之间创建的数据[不工作]

时间:2019-05-12 12:46:29

标签: node.js mongodb mongoose

我想聚合我的猫鼬模式的数据,以便获得特定月份的数据。我使用gte和lt运算符将match与aggregate一起使用,但是如果仅给定的单个match运算符(gte或lt)可以工作,则该匹配项。

我的订单架构如下:

   const OrderSchema = new Schema({
      _id: Schema.Types.ObjectId,
      createdAt: { type: Date, default: Date.now },
      updatedAt: { type: Date, required: false },

      //....................
     productId: { type: Schema.Types.ObjectId, ref: "products" },
     productName: { type: String, required: false },

    productQuantity: { type: Number, required: false },
    totalAmount: { type: Number, required: false },

    });

现在,我需要根据productQuantity查找本月售罄的前五种产品。   我尝试将匹配的createdAt字段与带有日期的gte和带有日期的lte一起使用。但是,如果一次使用两个,则不会返回结果,但是一次使用一次,则会返回结果。

  Order.aggregate([
{
  $match: {
    createdAt: { //schema contains createdAt field with Date.now()value
      $gte: Date("2019-04-30"),
      $lt: Date("2019-05-10")
    }
  }
  }])

  But using one at a time 
   Order.aggregate([
   {
   $match: {
    createdAt: {
      $gte: Date("2019-04-30")

    }
  }
  $group: {
     _id: "$productId",
     created: { $first: "$createdAt" },
     count: { $sum: "$productQuantity" }
   }
   }

   {
     $sort: {
      count: -1
    }
   },
    { $limit: 5 }

    }
    ])

它有效。但是我需要在给定月份后的一个月内找到最畅销的产品。 我是这样的

   Order.aggregate([
   {
    $match: {
    createdAt: {
      $gte: startDate
      }
   },
   $group: {
    _id: "$productId",
    created: { $first: "$createdAt" },
    count: { $sum: "$productQuantity" }
   }
  },
  {
    $sort: {
    count: -1
    }
   },

   { $limit: 5 }
  ])

但是这给出了消息”:“参数必须是聚合管道运算符”错误。  我为什么会有这样的问题?

0 个答案:

没有答案