sql >> データベース >  >> NoSQL >> MongoDB

Mongoで日付文字列(昇順)で並べ替える

    あなたの質問にリストが記載されているとしましょう

    > 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を使用できます。 ( https://docs.mongodb.com/manual/reference/operator / Aggregation / 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") }
    

    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のドキュメントを確認してください( http://php.net/manual/en/mongocollection.aggregate.php




    1. Rust MongoドライバーのBSONタイプをObjectIdに変換するにはどうすればよいですか?

    2. Mongo DBデザイン、埋め込みと関係

    3. Mongoosastic-{[エラー:生きている接続がありません]メッセージ:'生きている接続がありません'}

    4. MongoDBコレクションに一度に複数のアイテムを挿入する方法