转换Mongo Shell $或PHP语法

时间:2016-04-20 03:11:38

标签: php mongodb laravel-4

我是新手所以请耐心等待。我想将此robomongo查询转换为mongolid查询:

 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]
                                    ]
                            ]);

1 个答案:

答案 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);

通过这种方式,您可以发现表示结构的差异。