Php Mongo上按日期字符串排序(升序)
我有一个数据库,其日期列的格式为dd/mm/yyyy,我想按日期升序排序Php Mongo上按日期字符串排序(升序),php,mongodb,Php,Mongodb,我有一个数据库,其日期列的格式为dd/mm/yyyy,我想按日期升序排序 $cursor = $collection->find($filter)->sort(array('date' => 1, 'tripID' => 1)); 日期是一个字符串,我也在tripID上进行过滤,但这方面正在发挥作用。问题是,目前我得到: 01/01/2014 01/02/2014 02/01/2014 02/02/2014 我想要的是: 01/01/2014 02/01/2014 0
$cursor = $collection->find($filter)->sort(array('date' => 1, 'tripID' => 1));
日期是一个字符串,我也在tripID上进行过滤,但这方面正在发挥作用。问题是,目前我得到:
01/01/2014
01/02/2014
02/01/2014
02/02/2014
我想要的是:
01/01/2014
02/01/2014
01/02/2014
02/02/2014
是否可以使用查询来实现这一点,或者需要在应用程序中实现这一点?假设我们有您问题中给出的列表
> db.dates.insertMany([{ "date": "01/01/2014" },
{ "date": "01/02/2014" },
{ "date": "02/01/2014" },
{ "date": "02/02/2014" }])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5a314eae330cc13d0c9b10c4"),
ObjectId("5a314eae330cc13d0c9b10c5"),
ObjectId("5a314eae330cc13d0c9b10c6"),
ObjectId("5a314eae330cc13d0c9b10c7")
]
}
在MongoDB 3.6中,我们可以使用聚合框架并使用$dateFromString
()管道操作符将字符串日期转换为日期,然后对值进行排序:
> db.dates.aggregate([
{ "$project" : { "date" : { "$dateFromString" : { "dateString" : "$date"} } } },
{ "$sort" : { "date" : 1 } }
])
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c4"), "date" : ISODate("2014-01-01T00:00:00Z") }
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c5"), "date" : ISODate("2014-01-02T00:00:00Z") }
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c6"), "date" : ISODate("2014-02-01T00:00:00Z") }
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c7"), "date" : ISODate("2014-02-02T00:00:00Z") }
Pior到MongoDB 3.6有一个将字符串转换为词汇字符串日期的解决方法:
> db.dates.aggregate([
{ "$project" : {
"date" : {
"$let" : {
"vars" : { "parts":{ "$split" : [ "$date", "/" ] } },
"in" : {
"$concat" : [
{ "$arrayElemAt" : [ "$$parts" , 2 ] },
"-",
{ "$arrayElemAt" : [ "$$parts", 1 ] },
"-",
{ "$arrayElemAt" : [ "$$parts", 0 ] } ]
}
}
}
}
},
{ "$sort" : { "date" : 1 } }
])
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c4"), "date" : "2014-01-01" }
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c6"), "date" : "2014-01-02" }
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c5"), "date" : "2014-02-01" }
{ "_id" : ObjectId("5a314eae330cc13d0c9b10c7"), "date" : "2014-02-02" }
我知道这是用javascript编写的,您提到过它是用php编写的,但实际上是一样的,请查看php文档()您应该在MongoDB中将字符串转换为日期,这是您在应用程序中必须执行的操作。最大的问题是这里的字符串不是按词汇顺序排列的。