MongoDB, логический or (или)
23 января, 2012
Сегодня 2 весёлых примера.
1. логический или (or).
Задача: Найти пользователей, у которых возраст менее 20 лет, и тех, у которых возраст не заполнен.
Постановка задачи: т.к. mongodb является schema-free СУБД, то наличие нашего поля age не является обязательным. Запрос должен выглядеть(на языке логики) следующим образом: age<20 or age is null Проблема: на php адаптере mongodb запрос or должен выглядеть следующим образом:
'$or'=>array(условие1, условие2) |
При этом:
уловие1 = 'age'=>array('$lte'<=20) уловие2 = 'age'=>array('$exists'=>false) |
php, успешно заменит элемент массива с индексом ‘age’ из условие1 на, значение из условие2.
Решение:
завернём условие1 и условие2 в дополнительный массив:
$where=array ( '$or'=>array ( array ( 'age'=>array ( '$lte'=>20, ) ), array ( 'age'=>array ( '$exists'=>false ) ) ) ); |