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

MongoDB, NoSQL IAD

Оставить комментарий

© 2010 - 2019 Ядоблог. Ничего не защищено.
Powered by Лаборатория Яда. Написать Яду