<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3291013252004064211</id><updated>2024-10-24T09:08:36.621-07:00</updated><title type='text'>Python глазами одного человека.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blickpython.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blickpython.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex</name><uri>http://www.blogger.com/profile/10350283277428149997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxGRtL9UsJHMAwtKnVwzvzNdV-aETwb751vg6YxfhWnpTeBZexsKEGVsiTRSyEoI36q62fE0I9rL1IIo5ZsnQPWRd_LggAZtvpJRVcaA9AEEmR-r2qbzil2oCXh_U7qM/s220/vilnus_alex.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3291013252004064211.post-3087229783052399769</id><published>2012-06-07T00:56:00.001-07:00</published><updated>2012-11-28T22:30:14.011-08:00</updated><title type='text'>Музычка из ниоткуда или проигрыватель-демон.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;


К чему это?&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
По общим &quot;стандартам&quot; проигрыватель должен иметь несколько жизненно важных вещей:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Плейлист.&lt;/li&gt;
&lt;li&gt;Полосочку, по которой видно сколько осталось этого мучительного трека.&lt;/li&gt;
&lt;li&gt;Пару кнопочек: play, stop и т.д.&lt;/li&gt;
&lt;li&gt;Что-нибудь прыгающее или мерцающее, чтобы было)&lt;/li&gt;
&lt;li&gt;Еще некоторым нужен equalizer.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Все это конечно хорошо, но не всегда. Постепенно переходя от Gnome к OpenBox, а затем к Awesome (это я в плане рабочих столов), ценности мои начали меняться, и я понял, что то что мне не нужно постоянно, лучше прятать и прятать подальше. Это я все к тому, что есть такой замечательный плеер как xmms2.&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;


К сути.&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Когда-то на заре моей дружбы с Debian я долго мучился с настройкой Xorg, рестартуя его и издеваясь над ним как только мог. Естественным образом тогда я еще не понимал до конца великой логики процессов демонов (хотя не могу сказать что сейчас я это понял до конца), а мне хотелось чтобы в это время постоянно играла музыкальное сопровождение. на тот момент я использовал следующий метод: в отдельном терминале был запущен xine(или это был mplayer), который естественно не убивался если я выходил из иксов и музыка звучала из колонок. Этот вариант не плох, но все же не совсем то. Иногда бывает такое, что думать лень, и стоит просто написать &quot;killall -u &amp;lt;username&amp;gt;&quot;, в таком случае и мой xine запущенный от моего имени тоже грохнется.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Когда мои руки дошли до awesome в пользу xmms2 сыграли следующие факты:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Если я хочу запустить проигрыватель достаточно ввести одну команду &quot;xmms2 play&quot; или вообще нажать какое-нибудь сочетание клавиш(какое настроишь), для стопа тоже самое.&lt;/li&gt;
&lt;li&gt;Для перехода между треками, опять же, команда или сочетание, и не важно где ты находишься, не нужно листать окна или рабочие столы.&lt;/li&gt;
&lt;li&gt;А вот если ты хочешь посмотреть плейлист, тогда чуть сложнее. для этого уже как минимум консольку запустить нужно, но я считаю что это быстрее и удобнее, чем переходить куда-нибудь и кликать что-то(можно не отрываться от рабочего процесса). Открыл, сделал, закрыл. Причем опять же это можно делать не только из иксов, и хоть по &amp;nbsp; ssh.&lt;/li&gt;
&lt;/ol&gt;
Конечно же есть большой минус для тех кто привык таскать треки в плелисте. Для этого уже лучше поставить какой-нибудь графический интерфейс. А я привык слушать все целыми альбомами. поэтому данная функция мне не очень то и нужна.&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
По поводу добавления треков, то есть формирования плейлистов, то здесь я тоже предпочитаю &amp;nbsp;посмотреть на все сразу и покликать по ярлычкам), поэтому я пользую pcmanfm (или любой другой файловый менеджер) с установленной командой по клику &quot;xmms2 add %U&quot;. В общем это делается просто и наверняка все с этим знакомы.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В общем, если коротко, то это и есть те самые вещи, которые меня восхитили и заставили принять религию xmms2 :)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Сейчас еще пару слов про equalizer.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;

Заводим equalizer для xmms2&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Мне конечно медведь на ухо наступил, и не просто наступил, а хорошо оттоптал. Многие не понимаю моего музыкального предпочтения и почему мне нужен эквалайзер. Но я вам скажу одно, иногда я слушаю слова, иногда музыку. иногда мне нравиться когда звук глухой с хорошо поднятыми низкими частотами, а иногда я глушу все кроме средних частот. В общем это все на любителя.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если вы ставили xmms2 из репозитория, то скорее всего у вас уже будет установлен этот плагин. Посмотреть есть ли он можно следующим образом:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&quot;xmms2 server config | grep equalizer&quot;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если ваша консоль вывела его настройки, то все в порядке, можно пользовать!&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
С чего начать? Сперва нужно его добавить в эффекты. Делаем так:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&quot;xmms2 server config effect.order.0 equalizer&quot;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Если вы уже добавляли какой-либо эффект. тогда посмотрите свободный номер, то есть вместо &lt;b&gt;0 &lt;/b&gt;может быть другое число. После чего включаем его:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&quot;xmms2 server config equalizer.enabled 1&quot;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Далее собственно настройка. Имеется десять параметров &lt;b&gt;&quot;equalizer.legacN&quot; &lt;/b&gt;каждый из которых можно изменять в диапазоне [ -20.0, 20.0 ]. Для установки пользуем:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&quot;xmms2 server config equalizer.&lt;/b&gt;&lt;b&gt;legacN&lt;/b&gt;&lt;b&gt;&amp;nbsp;VALUE&quot;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Вот так вот можно поэкспериментировать :)&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Я всегда хотел найти консольный эквалайзер для xmms2 с псевдографическим интерфейсом, а потом.....&lt;/div&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;

&quot;Вот и наступил этот день&quot;&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Я взял библиотеку&amp;nbsp;&lt;b&gt;ncurses.h&lt;/b&gt;, посмотрел пару примеров и родил в течение часа свой примитивный псевдографический интерфейс, которым сейчас успешно пользуюсь. Выглядит это чудо так:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0mheotyIylEsjqJySay4JS5NWHEth73R-KpXGb8vs7Ztd4qNKfPpVV-RaVV3ldD8TBkqJhs4QQz946pY6ZVWNMdMhnztQ8oRfhi4M2gKjcodlc_ustA-BwIACpEYxoKxvbo9U-1DZ-oXn/s1600/equalizer.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0mheotyIylEsjqJySay4JS5NWHEth73R-KpXGb8vs7Ztd4qNKfPpVV-RaVV3ldD8TBkqJhs4QQz946pY6ZVWNMdMhnztQ8oRfhi4M2gKjcodlc_ustA-BwIACpEYxoKxvbo9U-1DZ-oXn/s320/equalizer.png&quot; height=&quot;265&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Управление стрелками права, лева, верх и низ. Сама его суть - плавный переход(и относительно быстрый) от одного состояния в другое, в отличие от настроек командами.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Текст этого чуда приводить не буду. дабы все не захламлять, но если произойдет такое чудо и кому-то это понадобиться обращайтесь, буду очень рад )&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;i&gt;&quot;Возрадуйтесь тем, что у вас есть выбор, и пользуйтесь тем, что для вас удобно!&quot;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blickpython.blogspot.com/feeds/3087229783052399769/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blickpython.blogspot.com/2012/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default/3087229783052399769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default/3087229783052399769'/><link rel='alternate' type='text/html' href='http://blickpython.blogspot.com/2012/06/blog-post.html' title='Музычка из ниоткуда или проигрыватель-демон.'/><author><name>Alex</name><uri>http://www.blogger.com/profile/10350283277428149997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxGRtL9UsJHMAwtKnVwzvzNdV-aETwb751vg6YxfhWnpTeBZexsKEGVsiTRSyEoI36q62fE0I9rL1IIo5ZsnQPWRd_LggAZtvpJRVcaA9AEEmR-r2qbzil2oCXh_U7qM/s220/vilnus_alex.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0mheotyIylEsjqJySay4JS5NWHEth73R-KpXGb8vs7Ztd4qNKfPpVV-RaVV3ldD8TBkqJhs4QQz946pY6ZVWNMdMhnztQ8oRfhi4M2gKjcodlc_ustA-BwIACpEYxoKxvbo9U-1DZ-oXn/s72-c/equalizer.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3291013252004064211.post-9083644011316792843</id><published>2011-11-22T10:48:00.000-08:00</published><updated>2011-11-22T10:48:22.169-08:00</updated><title type='text'>Python and Mongodb.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Данный пост не претендует на новизну, но все же мне хотелось бы обратить внимание на эту вещь.&lt;br /&gt;
Нынче становится очень популярно использовать NoSQL где попало. Это очень модная тенденция и я думаю она все же приносит больше пользы чем вреда.&lt;br /&gt;
Каждый может ознакомится с краткой информацией &lt;a href=&quot;http://ru.wikipedia.org/wiki/NoSQL&quot;&gt;здесь&lt;/a&gt;(но это уж совсем кратко) или ... в общем ищем в своем любимом поисковике.&lt;br /&gt;
Я не хочу вдаваться в вопросы хорошо это или плохо, а так же где это приемлемо использовать. Надеюсь это Вы решите сами, когда придет время.&lt;br /&gt;
А сейчас перейдем прямо к сути.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Хорошая документация имеется &lt;a href=&quot;http://mongodb.org/display/DOCS/Home&quot;&gt;здесь&lt;/a&gt; или (частично на русском &lt;a href=&quot;http://ru.wiki.mongodb.org/display/DOCS/Home&quot;&gt;тут&lt;/a&gt;).&lt;br /&gt;
В принципе по одной из этих ссылок Вы можете найти почти все о чем я буду говорить. А вот основной задачей поста будет являться акцентирование внимания на пропущенные, но(на мой взгляд) очень важные вещи.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Пару слов о структуре.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
В mongoDB есть три основных понятия, относящихся к хранению данных:&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;База данных.&lt;/li&gt;
&lt;li&gt;Коллекция.&lt;/li&gt;
&lt;li&gt;Документ.&lt;/li&gt;
&lt;/ol&gt;Что касается базы данных, то здесь ничего особенного нет. Говоря про &quot;Коллекцию&quot; можно проводить аналогию с таблицей, а по сути это просто набор документов произвольной структуры. Не смотря на то, что документы могут быть произвольной структуры, в коллекции как правило хранятся документы, которые имеют схожую структуру, так как над коллекцией документов выполняются основные задачи БД. Документ из себя представляет произвольный объект JSON. Если мы говорим о Python, то документ представляет из себя словарь произвольной структуры, ключами которого являются строки.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Добавление документов в коллекцию.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Добавление документов возможно либо по одному либо целым списком. Для этого у объекта коллекции имеются два метода:&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;save&lt;/span&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;doc&lt;/span&gt;)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;insert&lt;/span&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;list_doc&lt;/span&gt; | &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;doc&lt;/span&gt;)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;Каждый документ коллекции имеет значение с ключом &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&#39;_id&#39;&lt;/span&gt;&lt;/b&gt;. Если это значение не указано, то оно добавляется автоматически и является уникальным. В случае, если в коллекцию попытаться добавить документ c&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&#39;_id&#39;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;который уже имеется у некоторого документа коллекции, перезапись документа не произойдет.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Выборка документов коллекции.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Для выборки предназначены два основных метода коллекции:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;...&lt;/span&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;find_one&lt;/span&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;...&lt;/span&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Первый метод возвращает объект &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;Cursor&lt;/b&gt;&lt;/span&gt;, а второй непосредственно первый найденный документ удовлетворяющий заданным условиям.&lt;br /&gt;
О том как задавать условия выборки лучше почитать &lt;a href=&quot;http://www.mongodb.org/display/DOCS/Querying&quot;&gt;здесь&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
По поводу выборки стоит сказать еще пару слов о самом объекте курсор, но об этом немного дальше.&lt;br /&gt;
&lt;br /&gt;
Аналогично выборке работает функция удаления документов из коллекции, которая называется&amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;remove&lt;/span&gt;&lt;/b&gt;. Для удаления всей коллекции я советую использовать метод объекта &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;Database&lt;/b&gt;&lt;/span&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;drop_collection&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;name_collection&lt;/span&gt;)&lt;/b&gt;&lt;/span&gt;, так как при использовании&amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;remove&lt;/span&gt;&lt;/b&gt;&amp;nbsp;не удаляются индексы.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Обновление документов коллекции.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Для обновления данных коллекции основным является следующий метод:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;update&lt;/span&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;query&lt;/span&gt;,&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;data_for_update&lt;/span&gt;)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Вместо&lt;b style=&quot;color: blue;&quot;&gt; query&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;указываются условия выборки документов, которые необходимо обновить. В качестве&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;data_for_update&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;указывается словарь специальной структуры. Каким образом формировать данный словарь лучше посмотреть &lt;a href=&quot;http://www.mongodb.org/display/DOCS/Updating&quot;&gt;здесь&lt;/a&gt;. По ссылке приводится документация которая соответствует непосредственно самому консольному клиенту mongodb, но синтаксис практически ничем не отличается, а логика совпадает.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Здесь впервые я столкнулся с некоторым недоумением. Дело в том, что функция&amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;update&lt;/span&gt;&lt;/b&gt;&amp;nbsp;имеет еще несколько дополнительных параметров, значение которых по умолчанию &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;False&lt;/b&gt;&lt;/span&gt;:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;upsert&lt;/b&gt;&lt;/span&gt; - если значение этого параметра&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;True&lt;/b&gt;&lt;/span&gt;, тогда в случае пустой коллекции, в нее добавляется документ.&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;manipulate&lt;/span&gt;&lt;/b&gt; - это есть что-то, что я не совсем понял(.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;safe&lt;/b&gt;&lt;/span&gt; - при истинном значении этого параметра функция дожидается завершения операции и возвращает данные о выполнении обновлений.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;multi&lt;/b&gt;&lt;/span&gt; - если этот параметр принимает значение&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;False&lt;/b&gt;&lt;/span&gt;, то обновляется только одна запись в базе, которая удовлетворяет условиям, если же&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;True&lt;/b&gt;&lt;/span&gt;&amp;nbsp;- все записи.&lt;br /&gt;
&lt;br /&gt;
На мой взгляд очень не логично делать параметр&amp;nbsp;&lt;b style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;multi&lt;/b&gt;&amp;nbsp;равным&amp;nbsp;&lt;b style=&quot;color: red; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;True&lt;/b&gt;&amp;nbsp;по умолчанию, так как почти всегда приходится обновлять целую пачку данных.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Немного о индексах.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Для работы с индексами коллекции имеют два метода:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime; font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;index_information&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; - выводит информацию о индексах коллекции.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime; font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;ensure_index&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;key_name&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;- создает индекс по имени поля.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Индексация полей имеет как положительную сторону, так и не очень. Положительной является, то что индекс сортируется при добавлении документа в коллекцию, то есть когда Вы будете осуществлять выборку по индексированному полю с сортировкой или с условием больше &lt;b&gt;A&lt;/b&gt; но меньше &lt;b&gt;B&lt;/b&gt; (к примеру), то он очень поможет базе не тужиться. Но этот же плюс является очевидным минусом при добавлении документов. В общем если нужно часто выбирать и сортировать, то пользуемся индексацией полей(ключей документов).&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Как и обещал про курсоры.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Метод&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;find&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;возвращает объект &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;Cursor&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;. Что же он имеет такого хорошего?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;У&amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Cursor&lt;/b&gt;&amp;nbsp;есть итератор, то есть его можно прямо использовать в &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #f1c232; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;for&lt;/span&gt;&lt;/b&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #f1c232; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;map&lt;/b&gt;&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #f1c232; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;filter&lt;/b&gt;&lt;/span&gt; и т.д.&lt;/li&gt;
&lt;li&gt;У&amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Cursor&lt;/b&gt;&amp;nbsp;есть метод &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;next&lt;/span&gt;(),&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;который возвращает следующий элемент выборки.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Cursor&lt;/b&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;якобы может имитировать параллельный доступ к элементам через оператор [], но прошу не обольщаться, так как он только якобы параллельный и выборка последнего элемента будет в n раз дольше чем выборка первого, где n - количество элементов выборки.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Cursor&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;имеет, как будто, два важных параметра: &lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;limit&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; и &lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;skip&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;. Первый устанавливает максимальное количество документов при выборке, второй - сколько элементов стоит пропустить. В реальной жизни никакого ускорения работы или существенной помощи данные параметры мне не оказали. В частности&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;skip&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;работает по следующему принципу:&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: yellow;&quot;&gt;skip&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;=m&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;, тогда при выборке &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;-ого элемента он будет выбирать &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;n+m&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; элемент начиная с 0, то есть его работа точно повторяет прямые действия &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;cur[n+m].&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Здесь можно сделать один небольшой совет:&lt;br /&gt;
&amp;nbsp; Если необходимо делать выборку в стиле плывущего окна. то лучше добавить некий дополнительны параметр у документов коллекции и осуществлять плывущее окно следующей выборкой:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;col_name&lt;/span&gt;.&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;find&lt;/span&gt;({&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #660000;&quot;&gt;&#39;id_float_wind&#39;&lt;/span&gt;:{ &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #660000;&quot;&gt;&#39;$gt&#39;&lt;/span&gt;: &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;N0&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #660000;&quot;&gt;&#39;$lt&#39;&lt;/span&gt;: &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;N0&lt;/span&gt;+&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;N&lt;/span&gt; }})&lt;/b&gt;&lt;/span&gt;, где &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;N0&lt;/b&gt;&lt;/span&gt; - начало окна, &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;N&lt;/b&gt;&lt;/span&gt; - ширина окна.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Завершим с mapreduce.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Mapreduce&lt;/span&gt;&lt;/b&gt; это хорошая вещь, с её помощью можно неплохо масштабировать проекты, которые требуют больших объемов данных. Но у этого есть одно упущение, результат будет хорош если данные не имеют сложной структуры, и документы одной коллекции являются независимыми друг от друга. В общем про эту технологию написано довольно много. Рассмотрим как устроен интерфейс для &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mongodb&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;
Основной метод, который реализует mapreduce, является(метод коллекции):&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;map_reduce&lt;/span&gt;(&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;map&lt;/span&gt;,&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;reduce&lt;/span&gt;,...)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;map&lt;/span&gt;&lt;/b&gt; и &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;reduce&lt;/span&gt;&lt;/b&gt; это строки или объекты &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Code&lt;/span&gt;&lt;/b&gt; из модуля &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;bson.code&lt;/span&gt;&lt;/b&gt;, которые содержат текст соответствующих функций на &lt;b&gt;javascript&lt;/b&gt;. Как организован синтаксис этиx функций можно посмотреть &lt;a href=&quot;http://www.mongodb.org/display/DOCS/MapReduce&quot;&gt;тут&lt;/a&gt;.&lt;br /&gt;
Я скажу лишь пару слов, про то как это функционирует:&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Mongodb&lt;/span&gt; &lt;/b&gt;и использование технологии&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;map&lt;/b&gt;&lt;b&gt;reduce&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;b&gt;&amp;nbsp;&lt;/b&gt;предполагает, что база будет размещена на нескольких вычислительных узлах.&lt;br /&gt;
Функция &lt;b&gt;map&lt;/b&gt; реализует выборку данных из коллекции для обработки, причем выборка осуществляется по принципу: проходим всю коллекцию; по каждому документу можем вернуть пару (ключ, значение); после этого значения с одинаковыми ключами объединяются в списки. Данная функция выполняется одним процессом.&lt;br /&gt;
Поясняю объединение значений по ключам:&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Допустим есть набор пар&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #134f5c; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;(key_1:val_1)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #134f5c; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;(key_2:val_2)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #134f5c; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;(key_1:val_2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;  &lt;td width=&quot;100&quot;&gt;&lt;/td&gt;  &lt;td valign=&quot;top&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;b&gt;После объединения получим&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #134f5c; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;(key_1:[val_1,val_3])&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #134f5c; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;(key_2:[val_2])&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Функция&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;reduce&lt;/span&gt;&lt;/b&gt;&amp;nbsp;реализует обработку данных. Данная функция распараллеливается.&lt;br /&gt;
&lt;br /&gt;
Здесь можно столкнуться со следующими двумя проблемами(я сталкивался с двумя):&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Начиная (что-ли с версии &lt;b&gt;1.8&lt;/b&gt;) у функции&amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: lime;&quot;&gt;map_reduce&lt;/span&gt;&lt;/b&gt;&amp;nbsp;есть третий обязательный параметр - имя коллекции в которую необходимо поместить результат. Если указанной коллекции не существует, она будет создана, если же указать коллекцию с документами, перед помещением результатов все будет удалено. Советую третий параметр указывать всегда, будет проще при переходе на новую версию.&lt;/li&gt;
&lt;li&gt;В разных версиях&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mongodb&lt;/span&gt;&lt;/b&gt;&amp;nbsp;функция&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;reduce&lt;/span&gt;&lt;/b&gt;&amp;nbsp;может выполняться или нет. Если Вы будете использовать &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mongodb&lt;/span&gt;&lt;/b&gt; используя родные репозитории проекта, то по умолчанию функция&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;reduce&lt;/span&gt;&lt;/b&gt;&amp;nbsp;вызывается только если в списке значений соответствующему одному ключу больше одного значения(как заставить работать для каждого не знаю). А вот напротив в версии из дистрибудива &lt;b&gt;Debian&lt;/b&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;reduce&lt;/span&gt;&lt;/b&gt; вызывается в любом случае.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blickpython.blogspot.com/feeds/9083644011316792843/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blickpython.blogspot.com/2011/11/python-and-mongodb.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default/9083644011316792843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default/9083644011316792843'/><link rel='alternate' type='text/html' href='http://blickpython.blogspot.com/2011/11/python-and-mongodb.html' title='Python and Mongodb.'/><author><name>Alex</name><uri>http://www.blogger.com/profile/10350283277428149997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxGRtL9UsJHMAwtKnVwzvzNdV-aETwb751vg6YxfhWnpTeBZexsKEGVsiTRSyEoI36q62fE0I9rL1IIo5ZsnQPWRd_LggAZtvpJRVcaA9AEEmR-r2qbzil2oCXh_U7qM/s220/vilnus_alex.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3291013252004064211.post-5379055778025438871</id><published>2011-11-21T05:42:00.000-08:00</published><updated>2011-11-21T05:42:52.088-08:00</updated><title type='text'>Первый пост.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Добрый день.&lt;br /&gt;
С этого поста я хочу начать серию изложений, которые будут посвящены языку Python, а так же вещам, которые в какой либо мере связаны с ним.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;С чего все начиналось.&lt;/span&gt;&lt;br /&gt;
Началось все в далеком(для большинства) 2008-ом году, когда мне в руки попалась книга &quot;Программирование искусственного интеллекта&quot;, в которой большинство примеров было реализовано на Python. После того как эта книжка была заброшена на далекую полку, началось мое изучения данного языка программирования.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blickpython.blogspot.com/feeds/5379055778025438871/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blickpython.blogspot.com/2011/11/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default/5379055778025438871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3291013252004064211/posts/default/5379055778025438871'/><link rel='alternate' type='text/html' href='http://blickpython.blogspot.com/2011/11/blog-post.html' title='Первый пост.'/><author><name>Alex</name><uri>http://www.blogger.com/profile/10350283277428149997</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxGRtL9UsJHMAwtKnVwzvzNdV-aETwb751vg6YxfhWnpTeBZexsKEGVsiTRSyEoI36q62fE0I9rL1IIo5ZsnQPWRd_LggAZtvpJRVcaA9AEEmR-r2qbzil2oCXh_U7qM/s220/vilnus_alex.jpg'/></author><thr:total>1</thr:total></entry></feed>