node.js - Mongoose 聚合的问题
问题描述
我的要求是让特定用户获取根据月份分组的所有费用并返回月份和该月份的总费用。我收集了类似下面的东西。
expenses = {{
"_id": {
"$oid": "5bc0f74df46dae0bf4ffdc39"
},
"user": {
"$oid": "5bab847a5b0d2e2ce8b4cbe5"
},
"date": "15-Mar-2018",
"expenseInfo": "Clothes",
"category": "Shopping",
"amount": 100,
"__v": 0
},
{
"_id": {
"$oid": "5bc0f78bf46dae0bf4ffdc3b"
},
"user": {
"$oid": "5bab847a5b0d2e2ce8b4cbe5"
},
"date": "11-Apr-2018",
"expenseInfo": "mobile",
"category": "Bills",
"amount": 100,
"__v": 0
},
{
"_id": {
"$oid": "5bc0f76cf46dae0bf4ffdc3a"
},
"user": {
"$oid": "5bab847a5b0d2e2ce8b4cbe5"
},
"date": "18-Apr-2018",
"expenseInfo": "Petrol",
"category": "Fuel",
"amount": 20,
"__v": 0
}
}
这是我的费用模式。另外,请注意用户对象(用户是在费用模式中引用的不同模式)
const ExpenseSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
},
date: {
type: String
},
expenseInfo: {
type: String,
required: true
},
category: {
type: String,
required: true
},
amount: {
type: Number,
required: true
}
});
我试过这样的东西,但我没有得到任何数据。这里有什么问题?
Expense.aggregate([{
$match: {
"_id": request.user.id
}
},
{
"$group": {
"_id": {
"$arrayElemAt": [{
"$split": ["$date", "-"]
}, 1]
},
"Total": {
"$sum": "$amount"
}
}
}
])
解决方案
推荐阅读
- performance - 卡夫卡生产者放缓
- shell - 在 ZSH 中使用陷阱退出 shell 脚本的正确方法?
- spring-boot - 获取管理员角色的空列表
- c# - 用于 C++ std::vector 的 C# 类 LINQ 强制转换方法?
- ruby-on-rails - 为什么我无法在我的应用程序中访问 github 上的 gem?
- python - 从页面 https://www.stubhub.com/new-york-rangers-tickets/performer/2764/ 创建一个链接列表,其中包含文本 New York Rangers
- mongodb - 如何通过restapi更新mongo db上的记录?
- python - 将 XML 转换为 Pandas
- c - 为什么 VISA (4111111111111111) 没有返回任何东西?
- unit-testing - 如何模拟静态最终类