2016-04-20 2 views
1

Я новичок, поэтому, пожалуйста, проявите терпение. Я хочу, чтобы преобразовать этот robomongo запрос монголоидного запроса:

db.getCollection('products').find({'images':{$size:0},          
              $or:[         
               {'inventory.a':{'$gt':0}}, 
               {'inventory.b':{'$gt':0}} 
               ] 
              }) 

Ниже то, что я прямо сейчас, который выдает ошибку Can't canonicalize query: BadValue $or needs an array:

$products = Product::where([ 
          'images' => [ '$size' => 0 ], 
          '$or' => [ 
             'inventory.a' => ['$gt' => 0], 
             'inventory.b' => ['$gt' => 0] 
            ] 
          ]); 

ответ

2

Вы пропускаете скобки внутренних ключей $or:

$products = Product::where([ 
    'images' => [ '$size' => 0 ], 
    '$or' => [ 
      [ 'inventory.a' => ['$gt' => 0] ], 
      [ 'inventory.b' => ['$gt' => 0] ] 
    ] 
]); 

Обозначение MongoDB является «списком» «объектов», а не «единственным объектом с несколькими ключами», как вы отметили.

При сравнении с JSON, вы должны сбросить кодировку JSON, чтобы проверить:

echo json_encode($query, JSON_PRETTY_PRINT); 

Таким образом, вы можете обнаружить различия в том, как вы представляли структуру.

+0

благодарит за эту замечательную информацию. Вы просто спасли меня здесь. – KristCont

+0

Я пробовал этот 'echo json_encode ($ products, JSON_PRETTY_PRINT)', но это только echos '{}'. вы знаете, почему? – KristCont

+1

Потому что я говорю о «запросе», а не о результате. Итак, '$ query = ['images' => ['$ size' => 0]]; echo json_encode ($ query, JSON_PRETY_PRINT); $ products = Product :: where ($ query); 'Это то, что он живет в мире. –

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