[5]こんにちは、ursmです。前回は様々な条件でドキュメントを検索する方法をご紹介しました。今回はドキュメントのアップデートを見ていきましょう。アップデートの基本となるのはupdateコマンドです。<document>)第一引数は検索条件です。この条件に該当するドキュメントのうち、最初の1つを第二引数のドキュメントで置き換えます。このコマンドはちょっと奇妙な挙動をします。年月日を設定するとしましょう。'1983-09-20'})結果としてこのユーザはどうなるでしょうか。'1983-09-20'}元々あったnameというキーがなくなってしまいました。update()は普通に使うと元のドキュメントを破壊的に上書きしてしまいます。このようにしたらどうでしょうか。'1983-09-20'}悪くはありませんが、冗長ですね。キーが増えたとき大変ですし、常にドキュメント全体を上書きするのでパフォーマンスも悪そうです。Operationsという仕組みが用意されています。先程の例を書き換えてみましょう。'1983-09-20'}$setは指定されたキーに値をセットする効果を持つモディファイアです。他にもいくつかありますので、見てみましょう。1}})指定されたキーに値を足し合わせます。負の値を使えば減らすこともできます。'ruby'}})配列型のプロパティに値を追加します。'kinesis'}})$pushと似ていますが、追加する値が配列にすでに入っている場合は何もしません。値を重複させたくない場面で使います。'締切破り'}})配列型のプロパティから指定された値を取り除きます。モディファイアは複数組み合わせて使うこともできます。Operationsはデータの一貫性を保つ上で重要な役割を果たします。$incと同じことを素直にやると以下のようになります。db.users.save(ursm)一見同じようですが、大きな違いがあります。ageをインクリメントしている間に他のプロセスからデータが更新された場合を考えてみてください。そのデータはsave()によって上書きされ、二度と日の目を見ることはないでしょう。$incを用いればこのような問題は発生しません。MongoDBは分散環境での性能向上に主眼を置いているため、リレーショナルデータベースのようなトランザクションをサポートしません。Operationsによってドキュメント単位でのアトミックな操作が行えるようになっています。このことはMongoDB特有のデータモデリング・スキーマ設計へと繋がっていくのですが、その話はまた今度にしましょう。Operationsについてご紹介しました。次回は引き続きアップデートについてです。〜自分の環境の変わった点から見つける〜こんにちは。今僕が参加しているプロジェクトでは東京と福井の2拠点で分散して開発をしている、いわゆる分散開発プロジェクトです。いった、普通の開発環境と違った環境で、普段「良い」と言われているプラクティスを試してみると、ちょっと違った視点が得られるようです。僕のチームでは、朝会やイテレーションミーティングの時に、Mikogo[*1]という、無償で使えるデスクトップ共有ソフトを使って情報共有を行っていながら話を進めています。面表示を簡単に切り替えられたり、別の参加者が表示中のマシンをリモートコントロールできたりします。その他にも下記のような幾つか特徴があります。マーカーで文字を書くようなホワイトボードの機能がある。現在Mikogoのページでは日本語の説明ページが用意されていないため、簡単に使い方を紹介しましょう。1.Mikogoをインストールすると、タスクバーに「M」のアイコンができます。Mikogoのアカウントが作成されます。