Auto Increment with MongoDB
Популярная по своей дурости задача «а я не хочу эти длинные id, я хочу увеличивающиеся циферки в качестве айдишников».
Несмотря на свою нелепость, она иногда нужна. Например, человекочитаемые номера. «Хуйня номер 10».
Самый простой и рекомендуемый всеми способ — хранить где-то отдельно счетчик и менять его с помощью findandmodify (для чего в php нет отдельного метода, но можно через command).
Но можно сделать проще!
Если это хорошая, правильная таблица, из которой ничего не удаляется, то мы можем посчитать «номер записи» в таблице тупо зная тот факт, что нативные MongoId увеличиваются со временем и по ним можно сортировать не хуже, чем по какой-нибудь «дате создания».
Короче, как-то так:
$mongo -> insert ($U);
$inc = $mongo -> find (array ("_id" => array ('$lt' => $U[_id])));
$inc = $inc -> count ();
$inc++;
$mongo -> update (array ("_id" => new MongoId ($U[_id])), array ('$set' => array ("inc" => $inc)));
Ограничения очевидны, но часто «и так сойдет», да-да.
Фотосортер
Php maed me sad
Сайт про то, какое php гавно неконсистентное.
Помимо того, что перечислено (хотя я не со всем сталкивался), меня в последнее время раздражает, что при нестрогом типировании (это так по-русски называется?), которое, наверное, благо, пустая или несуществующая переменная не считается пустым массивом.
Т.е. foreach ($a as $key => $value)
будет ругаться на то, что $a не массив, если $a — не массив (смешно, я знаю).
В моем понимании, $a="";
должно быть «равно» $a=array();
Аргументация?
И в первом и во втором случае можно сделать $a[]="new"
, и оно будет работать.
Ну и вообще можно по foreach и строку перебирать, если эта строка, почему бы и нет, раз остальное позволять работать со строкой как с «псевдомассивом».
Еще на стыке нестрогого типирования в php и mongodb иногда случаются смешные вещи, типа переменных «145», которые вдруг оказываются строкой, но это не проблема языка.
ЧПУ sucks balls
ЧеловекоПонятные Урлы — это фетиш.
Я буду отказываться от них везде, где можно. В урле, типа www.hobius.com/?user=smirnov я не вижу ничего плохого, например.
Особенно когда по адресу site.com/users/ нет ничего, а по адресу site.com/users/username уже есть.
Ну и заодно, по аналогии с «твиттерскими» адресами, типа twitter.com/#/something, придумал самый простой способ реализовать ЧПУ почти везде безо всяких mod_rewrite и прочего.
Надо вместо таких урлов:
spectator.ru/life/fiction/blue_meteorite
Делать вот такие:
spectator.ru/?/life/fiction/blue_meteorite
Тогда, например, в php мы все получаем в $_SERVER["QUERY_STRING"].