MongoDB - 排序结果并将日期转换为字符串
MongoDB - Sort result and Convert date to string
我有一个要求,结果应该按 DESC(按日期)顺序排序,因此最新文档将排在第一位,然后是其他文档,并将日期转换为字符串格式,例如“2019-06-27”。
我可以通过 $dateToString 函数将日期转换为字符串格式,但不能排序,因为它现在是字符串格式。但是,尝试应用第一种排序然后进行转换,但没有得到预期的输出。
以下是 MongoDB 集合中存储的文档:
{
"_id": "9d78d0e8-7b13-4487-88a3-d91d64f29b38",
"Number": "001",
"createdon": {
"$date": "2019-09-19T00:00:00.000Z"
}
}, {
"_id": "5d78d0e8-7b13-4487-88a3-d91d64f29b02",
"Number": "002",
"createdon": {
"$date": "2019-09-13T00:00:00.000Z"
}
}, {
"_id": "2w78d0e8-7b13-4487-88a3-d91d64f29b47",
"Number": "003",
"createdon": {
"$date": "2019-09-25T00:00:00.000Z"
}
}, {
"_id": "6e78d0e8-7b13-4487-88a3-d91d64f29b2d",
"Number": "004",
"createdon": {
"$date": "2020-01-18T00:00:00.000Z"
}
}
预期结果:
{
"_id": "6e78d0e8-7b13-4487-88a3-d91d64f29b2d",
"Number": "004",
"createdon": "2020-01-18"
},
{
"_id": "2w78d0e8-7b13-4487-88a3-d91d64f29b47",
"Number": "003",
"createdon": "2019-09-25"
},
{
"_id": "9d78d0e8-7b13-4487-88a3-d91d64f29b38",
"Number": "001",
"createdon": "2019-09-19"
},
{
"_id": "5d78d0e8-7b13-4487-88a3-d91d64f29b02",
"Number": "002",
"createdon": "2019-09-13"
}
任何帮助将不胜感激!!谢谢
However, tried to apply the first sort and then convert but not getting the expected output.
问题出在哪里。这种聚合非常适合我:
db.collection.aggregate([
{
$sort: {
createdon: -1
}
},
{
$addFields: {
createdon: {
$dateToString: {
date: "$createdon",
format: "%Y-%m-%d"
}
}
}
}
])
你可以try it here.
我有一个要求,结果应该按 DESC(按日期)顺序排序,因此最新文档将排在第一位,然后是其他文档,并将日期转换为字符串格式,例如“2019-06-27”。
我可以通过 $dateToString 函数将日期转换为字符串格式,但不能排序,因为它现在是字符串格式。但是,尝试应用第一种排序然后进行转换,但没有得到预期的输出。
以下是 MongoDB 集合中存储的文档:
{
"_id": "9d78d0e8-7b13-4487-88a3-d91d64f29b38",
"Number": "001",
"createdon": {
"$date": "2019-09-19T00:00:00.000Z"
}
}, {
"_id": "5d78d0e8-7b13-4487-88a3-d91d64f29b02",
"Number": "002",
"createdon": {
"$date": "2019-09-13T00:00:00.000Z"
}
}, {
"_id": "2w78d0e8-7b13-4487-88a3-d91d64f29b47",
"Number": "003",
"createdon": {
"$date": "2019-09-25T00:00:00.000Z"
}
}, {
"_id": "6e78d0e8-7b13-4487-88a3-d91d64f29b2d",
"Number": "004",
"createdon": {
"$date": "2020-01-18T00:00:00.000Z"
}
}
预期结果:
{
"_id": "6e78d0e8-7b13-4487-88a3-d91d64f29b2d",
"Number": "004",
"createdon": "2020-01-18"
},
{
"_id": "2w78d0e8-7b13-4487-88a3-d91d64f29b47",
"Number": "003",
"createdon": "2019-09-25"
},
{
"_id": "9d78d0e8-7b13-4487-88a3-d91d64f29b38",
"Number": "001",
"createdon": "2019-09-19"
},
{
"_id": "5d78d0e8-7b13-4487-88a3-d91d64f29b02",
"Number": "002",
"createdon": "2019-09-13"
}
任何帮助将不胜感激!!谢谢
However, tried to apply the first sort and then convert but not getting the expected output.
问题出在哪里。这种聚合非常适合我:
db.collection.aggregate([
{
$sort: {
createdon: -1
}
},
{
$addFields: {
createdon: {
$dateToString: {
date: "$createdon",
format: "%Y-%m-%d"
}
}
}
}
])
你可以try it here.