我在使用codeignitor3的mongo db上遇到问题,无法使用“ $ group”中的group by group by在创建时按日期创建记录,但是在表USER_DATA mongoDb数据库中有datetime格式。 当我运行mongo查询时,出现错误“无法从BSON类型的字符串转换为日期”
$date = date('Y-m-d',strtotime(-1 month));
$users = $this->common_model->aggregate($this->database['USER_DATA'], array(array('$match' => array('created' => array('$gte' => $date))),
array('$sort' => array('_id.created' => -1)),
array('$group' => array('_id' => array('year' => array('$year' => '$created'), 'month' => array('$month' => '$created'), 'day' => array('$dayOfMonth' => '$created')), 'count' => array('$sum' => 1))),
));
在使用之前
array('$group' => array('_id' => array('created' => '$created')), 'count' => array('$sum' => 1)),
它工作正常,但按日期记录的分组不符合要求,因为在DB表中,我们具有datetime格式。 它们对带有codeignitor库函数的mongo查询有什么影响吗?
答案 0 :(得分:0)
请仔细阅读Date conversions的Mongodb文档。
var project = {
"$project":{
"_id": 0,
"y": {
"$year": ISODate("$created").getFullYear()
},
"m": {
"$month": ISODate("$created").getMonth()+1 // months start from 0
},
"d": {
"$dayOfMonth": ISODate("$created").getDate()
}
}
},
group = {
"$group": {
"_id": {
"year": "$y",
"month": "$m",
"day": "$d"
},
"count" : { "$sum" : "$users" } //Users count
}
};
答案 1 :(得分:0)
现在我做了一个替代选择,那就是我在表名"created_date": "2019-01-10"
中创建了另一个字段,并使用“ created_date”及其正常工作进行了分组。
$date = date('Y-m-d H:i:s',strtotime(-1 month));
$users = $this->common_model->aggregate($this->database['USER_DATA'], array(array('$match' => array('created' => array('$gte' => $date))),
array('$sort' => array('_id.created' => -1)),
array('$group' => array('_id' => array('created_date' => '$created_date')), 'count' => array('$sum' => 1)),
));
但是我想要的是我提出问题的方式,因为有时我们不能仅仅为此做一个新的额外字段,这就是为什么我尝试我提出问题的选项的原因,我希望将来能得到该解决方案太。谢谢大家:)