我想聚合我的猫鼬模式的数据,以便获得特定月份的数据。我使用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 }
])
但是这给出了消息”:“参数必须是聚合管道运算符”错误。 我为什么会有这样的问题?