Mongodb和Codeigniter在两个日期之间记录

时间:2018-09-13 13:07:59

标签: mongodb codeigniter

我正在使用CodeIgniter和MongoDB获取两个日期之间的记录。正在获取记录,但没有进行纠正。

我的查询:

$startDate=date('d-m-Y',$startDate);
$endDate=date('d-m-Y',$endDate);

$this->mongo_db->select("*");
if ($startDate != '') {
    $this->mongo_db->where_gte('created_date', $startDate);
}
if ($endDate != '') {
    $this->mongo_db->where_lte('created_date', $endDate);
}
$this->mongo_db->where('id', $id);
$results = $this->mongo_db->get('tbl_test');

db中的记录,例如:

{ 
    "_id" : ObjectId("xxxxxxxxx..."), 
    "userId" : "4", 
    "pId" : "365", 
    "subject" : "hello", 
    "description" : "testing", 
    "status" : "0", 
    "status_description" : "", 
    "created_date" : "25-08-2018"
}

试图找到合适的解决方案。

2 个答案:

答案 0 :(得分:2)

理想的解决方案是将日期存储为日期类型而不是字符串,您的查询就可以正常工作。

{ 
    "_id" : ObjectId("xxxxxxxxx..."), 
    "userId" : "4", 
    "pId" : "365", 
    "subject" : "hello", 
    "description" : "testing", 
    "status" : "0", 
    "status_description" : "", 
    "created_date" : ISODate("2018-08-25T00:00:00Z") //YYYY-mm-ddTHH:MM:ssZ
}

如果不选择存储日期,则可以使用以下查询使用3.6版本中可用的$dateFromString$expr将日期字符串转换为日期。

{$dateFromString: { dateString: "25-08-2018",format: "%d-%m-%Y"}}

Mongodb查询:

db.colname.find({$expr:{$and:[{'$gte':[{'$dateFromString':{'dateString':'$created_date',format: '%d-%m-%Y'}},startDate]},  {'$lte':[{'$dateFromString':{'dateString':'$created_date',format: '%d-%m-%Y'}},endDate]}]}})

答案 1 :(得分:0)

日期在strtotime()中。 我将其更改为数据库中存储的相同格式

$startDate=date('Y-m-d',$startDate);
$endDate=date('Y-m-d',$endDate);

$this->mongo_db->select("*");
$searchCriteria =array('created_date' => array('$gte' => $startDate, '$lte' => $endDate),'id' => $id);
$this->mongo_db->where($searchCriteria);
$results = $this->mongo_db->get('tbl_test');

上面的代码已经过测试,我已经完成了所有类型的测试。我只更改了日期格式。