以下是我的示例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
如何纠正此错误?
答案 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服务器上加载此脚本并在那里执行。 希望这会有所帮助。