DB - MongoDB(2)
DB - MongoDB(1) - そういうことだったんですね
の続きです。
更新
update() を使います。第1引数に更新前のドキュメント、第2引数に新しいドキュメントを指定します。 ドキュメントは完全でなくてもかまいません。(一部を変更する)
> db.books.update({ title: "A tiny tired article" }, { $set : { sales: 10 } })
デフォルトでは、マッチした最初のドキュメントのみを更新します。全てを更新するには、
> db.books.update({ title: "A tiny tired article" }, { $set : { sales: 10 } }, { multi: true })
を指定します。
また、デフォルトでは、第1引数で指定したドキュメントが存在しない場合は、更新は行われません。 upsert (UPDATE+INSERT)を有効にすると存在しない場合にドキュメントを追加することができます。
> db.books.update({ id: 5 }, { $set : { title: "Hello, world!"} }, { upsert: true })
$set は update field operator の一つです。update field operator はよく使われる操作が定義されており、アトミックな動作が保証されています。
- $inc フィールドを指定した数分増やす
- $rename フィールド名を変更する
- $setOnInsert 第3引数で upsert: true とし、かつ update() メソッドが insert として動作したときに値を設定する。
- $set 存在しているフィールドの値を設定する
- $unset フィールドを削除する
> db.books.update({ "id": 1 }, { $inc: {sales: 10} })
> db.books.update({ "id": 1}, { $rename: {sales: "uriage" } })
> db.books.update({ "id": 2}, { $setOnInsert: { title: "Hello, world" } }, { upsert: true })
# { "id": 2 } のドキュメントが存在する場合は setOnInsert は実行されない
> db.books.update({ "id": 2 } , { $set: { price: 100 } })
find()で取得したドキュメントを変更してsaveメソッドを呼び出す方法もあります。こちらはアトミック性は保証されないので、ドキュメントの不整合に注意する必要があります。
> var book = db.books.findOne();
> book.title = "Have a nice day!";
> db.books.save(book);
削除
remove()を使います。doc には削除対象のドキュメントを指定します。一致するドキュメントを全て削除します。
> db.books.remove({id: 1})
コレクションの削除
drop() を使います。
> db.books.drop()
これでCRUD操作はできるようになります。今後、rubyライブラリからの操作やレプリケーション、シャーディングについて調べてみます

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)
- 作者: 本橋信也,河野達也,鶴見利章,太田洋
- 出版社/メーカー: リックテレコム
- 発売日: 2012/04/25
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 81回
- この商品を含むブログ (4件) を見る