У меня есть строка, преобразованная в MongoDate с помощью
$dateAdded = new MongoDate(strtotime("$time"));
echo "date ".$dateAdded;
Так что мой $dateAdded
теперь выглядит 0.00000000 1482505458
,
(Здесь 1482505458 — количество секунд, а 0,00000000 — в микросекундах.)
Теперь в моей коллекции есть документ с sec = 1482442458 и usec = 622000.
Array ( [_id] => Array ( [addedtime] => MongoDate Object ( [sec] => 1482505458 [usec] => 622000 ) )
Как мне написать запрос, который будет соответствовать только полю секунд?
Обновить:
Вот что я пробовал:
$date = "2016-12-23 15:04:18";
$m = new MongoClient("mongodb://172.29.0.186:27017");
$dateAdded = new MongoDate(strtotime("+330 minutes",strtotime("$time")));
echo " date ".$dateAdded;
$key = array('$and' => array(array('_id.createdby' => "$user"), array('_id.addedtime' => "$dateAdded")));
$collectionCount->find($key);
И это должно соответствовать:
Array ( [_id.createdby] => 10006161 ) Array ( [_id] => Array ( [addedtime] => MongoDate Object ( [sec] => 1482505458 [usec] => 622000 ) [empname] => Praveen Valecha [createdby] => 10006161 ) )
Это не идеальное решение, но оно работает для меня и должно работать для большинства людей, которые хотят избежать поиска времени с такой же точностью, как в микросекундах.
Вот часть кода, которую я модифицировал по сравнению с той, которая была задана в вопросе:
Я создал переменную со временем на одну минуту больше, чем время, которое я ищу.
$dateAdded = new MongoDate(strtotime("+330 minutes",strtotime("$time")));
echo " dateAdded ".$dateAdded;
$dateFinal = new MongoDate(strtotime("+331 minutes",strtotime("$time")));
echo " dateFinal ".$dateFinal;
Затем я использовал $ gte и $ lt для запроса документов в диапазоне дат, как это было предложено @Sammaye.
$key = array('_id.addedtime' => array('$gte' => $dateAdded, '$lt' => $dateFinal));
НОТА : Вы также можете добавить +1 second
в $dateFinal
вместо добавления дополнительной минуты для достижения более точных результатов.
Других решений пока нет …