2015-03-17 2 views
2

Пример Монго Входа:

array(
    'name' => 'blog one', 
    'blogCategory' => array(
     'displayAndLightMeasurement' => '1', 
     'LEDAndDisplayTestInstrument' => '0' 
    ) 
); 

запрос типа это работает отлично:

$blogInfoRaw = $collection->find(array('blogCategory' => array('displayAndLightMeasurement' => '1'))); 

При попытке '$or' запроса, как это:

$blogInfoRaw = $collection->find(array('$or' => array('blogCategory' => array('displayAndLightMeasurement' => '1')),array('blogCategory' => array('LEDAndDisplayTestInstrument' => '1')))); 

Я получаю эту ошибку:

$or requires nonempty array 

Что я делаю неправильно?

ответ

0

Вы действительно хотели использовать "dot notation" ссылаться на встроенные поля:

$blogInfoRaw = $collection->find(
    array(
     '$or' => array(
      array('blogCategory.displayAndLightMeasurement' => '1'), 
      array('blogCategory.LEDAndDisplayTestInstrument' => '1') 
     ) 
    ) 
); 

В противном случае запись вы используете означает, что «только» элементы, присутствующие во встроенном уровне являются те, которые вы укажете. Это неверно, так как есть несколько ключей. Таким образом, «точечная нотация» решает эту проблему, ссылаясь на отдельные ключи.

Нотация массива PHP здесь не помогает, но $or должен быть «реальным» массивом обертывания, как и в [].

Выдача json_encode часто помогает при сравнении с официальными примерами MongoDB.

+0

Я понимаю сейчас. Прекрасно работает. Спасибо! –

Смежные вопросы