我正在使用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"
}
试图找到合适的解决方案。
答案 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');
上面的代码已经过测试,我已经完成了所有类型的测试。我只更改了日期格式。