首页 > 解决方案 > 查询使用聚合时 Laravel mongodb 返回日期格式错误

问题描述

我用aggregatedwith$facet过滤来自 jenssegers/laravel-mongodb 的原始查询的集合中的列表用户。但我收到日期的数据有格式:

{
  "list": [
      {
        "_id": 1,
        "activated": 1,
        "status": 1,
        "created_at": {
          "$date": {
            "$numberLong": "1591626995341"
          }
        },
        "updated_at": {
          "$date": {
            "$numberLong": "1591627007461"
          }
        },
        "register_at": {
          "$date": {
            "$numberLong": "1591627007376"
          }
        }
      },
      ....
  ],
  "option":{
      "total":12,
      "offset":0,
      "limit":10

  }

我只想获取日期格式created_at:"Y-m-d H:i:s"

PS:我可以使用$addFields$dateToString如下

        $aggregate = [
            $matched,
            ['$sort' => ['_id' => 1]],
            [
                '$facet' => [
                    'list' => [
                        ['$skip' => $offset],
                        ['$limit' => $limit],
                        [
                            '$addFields' => [
                                'register_at' => [
                                    '$dateToString' => [
                                        'date' => '$register_at',
                                        'format' => '%Y-%m-%d %H:%M:%S'
                                    ]
                                ],
                                'created_at' => [
                                    '$dateToString' => [
                                        'date' => '$created_at',
                                        'format' => '%Y-%m-%d %H:%M:%S'
                                    ]
                                ],
                                'updated_at' => [
                                    '$dateToString' => [
                                        'date' => '$updated_at',
                                        'format' => '%Y-%m-%d %H:%M:%S'
                                    ]
                                ]
                            ]
                        ],
                        ['$project' => ['password' => 0]]
                    ],
                    'option' => [
                        ['$count' => 'total'],
                        [
                            '$addFields' => [
                                'offset' => $offset,
                                'limit' => $limit
                            ]
                        ]
                    ]
                ]
            ]
        ];

用于重新格式化 struct json 响应,但不是我的愿望。

标签: phplaravelmongodbmongodb-query

解决方案


您可以在模型中使用 Eloquent Mutators、Date Casting your created_at、updated_at 和 register_at

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class YourModel extends Model
    {
        // some code ...
        
        public function getCreatedAtAttribute($created_at){
            return date("Y-m-d H:i:s", $created_at);
        }
        public function getUpdatedAtAttribute($updated_at){
            return date("Y-m-d H:i:s", $updated_at);
        }
        public function getRegisterAtAttribute($register_at){
            return date("Y-m-d H:i:s", $register_at);
        } 
    }

推荐阅读