Mongodb и Codeigniter Record между двумя датами - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю над тем, чтобы получить записи между двумя датами, используя 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');

Записи в дБ, например:

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

Пытаясь найти правильное решение ..

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Дата указана в 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');

Приведенный выше код протестирован. Я провел все виды тестирования. Я изменил только формат даты.

0 голосов
/ 17 сентября 2018

Идеальным решением было бы сохранить дату как тип даты вместо строки, и ваш запрос будет работать нормально.

{ 
    "_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
}

Если сохранение даты не доступно, вы можете использовать приведенный ниже запрос для преобразования строки даты в дату, используя $dateFromString и $expr, доступные в версии 3.6.

{$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]}]}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...