Числа из PHP в MongoDB
Не знал, что официальный драйвер Монги для ПХП передаёт числа в Монгу как строки.
Долго не понимал почему удаление строк из коллекции срабатывает почти сразу, а не через заданное время. Наконец, догадался посмотреть на получившийся индекс, оказалалось, что все числа там — строки (в том числе и период через который значения удаляются).
А чтобы получились числа их надо завернуть в специальный объект:
$mongo->ensureIndex([
'date' => new MongoInt32(1)
], [
'expireAfterSeconds' => new MongoInt32(7200)
]);Вот как выглядит правильный индекс:

В неправильном числа будут окружены апострофами.
Комментарии 11
У нас PHP 5.4.19, MongoDB 2.4.6, драйвер 1.4.2, работает именно так, как я описал.
В итоге я писал рекурсивную обертку для массивов, где все is_numeric кастились в int/float.
У нас монга уже полтора года, буквально три месяца назад я обновил сервера, сделал реплику
Сейчас мы будем туда писать достаточно критичные данные (фид для сборной солянки контента) а до этого там хранились пользовательские настройки (~ 25 миллионов уников)
По mongostats сейчас примерно 50 апдейтов в секунду (все с write concern 1), чтений в десятки раз больше (ах да, забыл сказать, это sports.ru) и в принципе у нас за весь период проблем не было. Я тестировал кейсы с вырубанием одного из серверов, все как часы.
Я рассматривал другие nosql альтернативы, но там даже близко нет ничего сравнимого по возможностям с aggregate framework и все эти возможности я щас активно использую. Если честно, я реально не понимаю всего негатива в сторону монго. Тем более что негатив связан с тем, что легко настроить (типа того что в ранних версиях write concern был по дефолту в ноль)
Комментарий для gogis:
На продакшне до конца года не будем.
Ничего не поменялось. Япо-прежнему к ней плохо отношусь из-за:
1) того что она иногда «разваливается» и не поднимается автоматически обратно.
2) блокирует всю коллекцию на запись.
В остальном у меня претензий нет. Тем не менее, мы её используем для сессий (мы тогда о ней мало знали, теперь я знаю, что это плохой выбор) и для поиска (хороший атрибутивный поиск с индексами, вроде рабочий полнотекстовый).