Mongodb字符串到日期转换

时间:2017-10-06 10:27:41

标签: php database mongodb laravel-5.1

以下是我的示例mongodb集合

{
    "_id" : ObjectId("57ed32f4070577ec56a56b9f"),
    "log_id" : "180308",
    "issue_id" : "108850",
    "author_key" : "priyadarshinim_contus",
    "timespent" : NumberLong(18000),
    "comment" : "Added charts in the dashboard page of the application.",
    "created_on" : "2017-08-16T18:22:04.816+0530",
    "updated_on" : "2017-08-16T18:22:04.816+0530",
    "started_on" : "2017-08-16T18:21:39.000+0530",
    "started_date" : "2017-08-02",
    "updated_date" : "2017-08-02",
    "role" : "PHP",
    "updated_at" : ISODate("2017-09-29T15:27:48.069Z"),
    "created_at" : ISODate("2017-09-29T15:27:48.069Z"),
    "status" : 1.0
}

我需要在 started_date 的帮助下获取记录,默认情况下,我会给出两个日期,我会检查$gt$lt的开始日期。

        $current_date =  '2017-08-31';
        $sixmonthfromcurrent ='2017-08-01';

     $worklogs = Worklog::raw ( function ($collection) use ($issue_jira_id, $current_date, $sixmonthfromcurrent) {
     return $collection->aggregate ( [ 
              ['$match' => ['issue_id' => ['$in' => $issue_jira_id],
                          'started_date' => ['$lte' => $current_date,'$gte' => $sixmonthfromcurrent] 
                    ] 
              ],

              ['$group' => ['issue_id' => ['$push' => '$issue_id'],
                          '_id' => ['year' => ['$year' => '$started_date'],
                          'week' => ['$week' => '$started_date'],'resource_key' => '$author_key'],
                          'sum' => array ('$sum' => '$timespent')] 
              ],
              [ '$sort' => ['_id' => 1] 
              ] 
        ] );
     } );

如果我运行此查询,则会收到此类错误:

Can't convert from BSON type string to Date

如何纠正此错误?

1 个答案:

答案 0 :(得分:0)

我认为麻烦的 $ group 中唯一的字段是字段。 您可以通过在 $ group 聚合之前执行 $ project 来提取

btn + item

如果您知道日期字符串将始终采用此格式。当然,你无法通过子操作来查找本周。

如果您的字段 started_date 将是一个真正的ISODate(),那么您可以很容易地使用您在documentation中可能已经看到的内容。 如果您需要字段非常糟糕,我想您会这样做,那么我建议您将字段 started_date 转换为ISODate()。 您可以使用bulkWrite执行此操作:

$project: {
        year: { $substr: [ "$started_date", 0, 4 ] }, 
        issue_id: 1,
        author_key: 1,
        timespent: 1
    }

直接在mongodb服务器上加载此脚本并在那里执行。 希望这会有所帮助。