2014-10-31 3 views
0

Я довольно новичок в Mongodb. Просто прочитайте документацию и сыграйте. Я хотел бы найти документы со словом «МВД» и значением метки времени между 25 августа 2014 года по 28 августа 2014 года я написал такPHP/MongoDB & Complex Query

$var = "MIA"; 
date_default_timezone_set('UTC'); 
$from = strtotime('2014-08-25'); 
$to = strtotime('2014-08-28');; 

$var = new MongoRegex("/$var/"); 
$where1 = array('$or' => array(array(array('caller' => $var)), array('callee' => $var))); 

$where2 = array('$and' => array(array('timestamp' => array('$gte' => $from)), array('timestamp' => array('$lte'=> $to)))); 

$where = array('$and' => $where1, $where2); 

//var_dump($where); 

$cursor = $collection->find($where); 
var_dump($cursor); 

я получаю пустой результат. Можете ли вы посоветовать это исправить?

Благодаря

EDIT: Коллекция Структура enter image description here

+0

Могу ли я увидеть структуру коллекции? – alu

+0

Я обновил вопрос. – IFightCode

ответ

1

Попробуйте это.

$where1 = array(
    '$or' => array(
     // array(array('caller' => $var)) => often nest one 
     array('caller' => $var), 
     array('callee' => $var) 
    ) 
); 

$where2 = array(
    '$and' => array(
     array('timestamp' => array('$gte' => $from)), 
     array('timestamp' => array('$lte'=> $to)) 
    ) 
); 

// $where = array('$and' => $where1, $where2); => `$where2` is not in $and query 
$where = array('$and' => array($where1, $where2)); 
+0

Пока не повезло. – IFightCode

+0

Хм. Является 'var_dump (iterator_to_array ($ курсор));' output empty? – alu

+0

Моя неудачная, пропущенная одна переменная. Однако работал. благодаря – IFightCode