Node.js 如何在mongo db中按字符串类型的日期属性对记录进行排序
我在mongo db中有以下记录:Node.js 如何在mongo db中按字符串类型的日期属性对记录进行排序,node.js,mongodb,express,Node.js,Mongodb,Express,我在mongo db中有以下记录: [{ "_id" : ObjectId("56840939e41a0038122b04c1"), "sudentName":"xxx", "payments" : [ { "paymentAmount" : 5000, "paymentMode" : "Education", "paidBy"
[{
"_id" : ObjectId("56840939e41a0038122b04c1"),
"sudentName":"xxx",
"payments" : [
{
"paymentAmount" : 5000,
"paymentMode" : "Education",
"paidBy" : "Parent1",
"paymentDate" : "30-12-2015",
"paymentId" : ObjectId("5684097be41a0038122b04c2")
},
{
"paymentAmount" : 6000,
"paymentMode" : "Transport",
"paidBy" : "Parent1",
"paymentDate" : "30-12-2015",
"paymentId" : ObjectId("56840a54e41a0038122b04c3")
},
{
"paymentAmount" : 5000,
"paymentMode" : "Education",
"paidBy" : "Srinivas Nalla",
"paymentDate" : "19-01-2016",
"paymentId" : ObjectId("569e65cee51c46601bce3e1b")
},
{
"paymentAmount" : 5000,
"paymentMode" : "Education",
"paidBy" : "nalla",
"paymentDate" : "26-01-2016",
"paymentId" : ObjectId("56a6ea344d3111180cdeef5b")
}
]
}]
我使用以下查询结果,使用studentName和最近的paymentDate对paymentAmount进行分组:
db.students.aggregate([{$match:{studentName:"XXX"}},{$unwind:"$payments"},{$group:{_id:"$payments.paymentMode",paidDate:{$max:"$payments.paymentDate"},paidAmount:{$sum:"$payments.paymentAmount"}}}]);
此查询对付款日期给出了错误的结果,如下所示:
{ "_id" : "Transport", "paidDate" : "30-12-2015", "paidAmount" : 6000 }
{ "_id" : "Education", "paidDate" : "30-12-2015", "paidAmount" : 15000 }
{ "_id" : "Transport", "paidDate" : "30-12-2015", "paidAmount" : 6000 }
{ "_id" : "Education", "paidDate" : "26-01-2016", "paidAmount" : 15000 }
但我希望得到如下结果:
{ "_id" : "Transport", "paidDate" : "30-12-2015", "paidAmount" : 6000 }
{ "_id" : "Education", "paidDate" : "30-12-2015", "paidAmount" : 15000 }
{ "_id" : "Transport", "paidDate" : "30-12-2015", "paidAmount" : 6000 }
{ "_id" : "Education", "paidDate" : "26-01-2016", "paidAmount" : 15000 }
我不明白问题出在哪里。我对paymtdate列使用了$max运算符
有人能帮我吗?您的付款日期存储为字符串。那么,如果我使用max by paymentId,那么我如何才能获得该支付日期使用paymentId有什么意义呢?如果您将日期格式更改为YYYY MM,我想您可以按付款日期执行max。我是否将paymentDate保留为字符串类型或日期类型?如果您仅将日期保留为日期类型,这将很好。