いくつかのブール フィールドの値に基づいてクエリを実行する必要があります。これらのフィールドは後の段階で追加されたため、一部のドキュメントには存在しない場合があります。
シェルでクエリをテストしたところ、問題なく動作しました。
db.product.find({$or: [{approved:true},{$and: [{approved:{$exists:false}}, {sold:{$ne:true}}]}]})
しかし、PHP ドライバーで同じことをしようとしてもうまくいかないようです:
$condA = array('approved' => true);
$condB = array('approved' => array('$exists' => false), 'sold' => array('$ne' => true));
$query = array('pid' => $prodId, '$or' => array($condA, array('$and' => $condB)));
いくつかのバリアントをテストしましたが、常にログに次のエラーが表示されます。
assertion 13086 $and/$or/$nor must be a nonempty array
私が間違っているかもしれないことについてのヒントはありますか?前もって感謝します。