MongoDB Advent Calendarの穴埋め用投稿です。
そろそろリリースされそうなMongoDB 2.6のリリースノートの一部を翻訳しました。今回は大きな機能追加があった書き込み処理についてです。
注: MongoDBでは2.5.xは開発バージョンで、2.6.xがリリースバージョンとなります。
他の翻訳
- まとめ!MongoDB 2.6のリリースノート翻訳と所感
- リリース間近!MongoDB 2.6のリリースノート翻訳: 既存機能の変更点
- リリース間近!MongoDB 2.6のリリースノート翻訳: Aggregation Pipelineの変更点
- リリース間近!MongoDB 2.6のリリースノート翻訳: 新機能と改善点
- リリース間近!MongoDB 2.6のリリースノート翻訳: エンタープライズ向け機能
はじめに: 新登場のWrite Commands
MongoDB 2.6では、db.runCommandを使った新しい形式で書き込み処理(insert, update, delete)ができるようになりました。
例えば、runCommandを使ってinsertを行うコマンドはこのようになります。
db.runCommand(
{
insert: “people”,
documents: [ { name: "Sam", state: "active" } ],
ordered: false,
writeConcern: { w: 1 }
}
)
変更点
- オプションが指定できるようになりました。例えば、これまではドライバ経由でしか指定できなかったwriteConcern(書き込み保証レベル)が指定できます。
- 実行後、特に失敗時に詳細なステータスがリターンされるようになりました。
ところで、従来のdb.{collection}.insert()
はどうなったかというと、特に削除されている訳ではなく、使えます。ただし、中身は大きく変わっています。
mongoシェルでdb.{collection}.insert
と()
を外して実行すると、functionの定義が確認できますが、2.4.xと2.5.xでは大きく変わっています。
それではリリースノートの翻訳に入ります。
元のリリースノートはこちら
http://docs.mongodb.org/master/release-notes/2.6/
目次
書き込みオペレーションの変更点
- 新しい書き込み系コマンド
- 新しいUpdateオペレーター
-
$mul
Updateオペレーター -
xor
演算を使用した$bit
オペレーター -
$min
Updateオペレーター -
$max
Updateオペレーター -
$currentDate
Updateオペレーター -
$push
UpdateオペレーターのためのModifiersのエンハンス -
$each
Modifierの変更 -
$sort
Modifierのエンハンス -
$slice
Modifierのエンハンス -
$position
Modifire
新しい書き込み系コマンド
新しいinsert, update, deleteコマンドがサポートされました。これらのコマンドは明示的に書き込み保証レベル(write concern)を指定でき、複数ドキュメントのバルクインサートにおいて、どれか一つが失敗しても継続するように指定できます。
詳細情報:
バージョン2.5.4、またはそれ以降のMongoDBインスタンスにmongoシェルで接続した場合、デフォルトで新しい書き込みオペレーションが使われます。
訳注: db.{collection}.insert()でもrunCommandと同様に、新しい書き込みオペレーションが使われます。
以前のバージョンのMongoDBインスタンスに接続した場合は、従来の書き込みオペレーションを使用します。
MongoDB, Inc.が開発している各言語用の公式なMongoDBドライバは、バージョン2.6のリリース前に新しい書き込みコマンドをサポートします。詳細については使っているドライバのリリースノートを参照してください。
新しいUpdateオペレーター
書き込み系と同じく、更新系のオペレーターも追加/変更されました。
$mul
Updateオペレーター
$mul
オペレーターを使用すると、指定した値でフィールド値を乗算することができます。
詳細情報: $mul
xor
演算を使用した$bit
オペレーター
$bit
オペレーターは論理XOR演算を使用してビット単位の更新をサポートします。
詳細情報: $bit
$min
Updateオペレーター
$min
オペレーターは、指定した値が現在のフィールド値よりも小さかったら、フィールド値を指定した値に更新します。
詳細情報: $min
$max
Updateオペレーター
$max
オペレーターは、指定した値が現在のフィールド値よりも大きかったら、フィールド値を指定した値に更新します。
詳細情報: $max
$currentDate
Updateオペレーター
$currentDate
オペレーターは現在時刻をセットします。Date型、timestamp型を選択できます。
詳細情報: $currentDate
$push
UpdateオペレーターのためのModifiersのエンハンス
$push
オペレーターは機能性と使いやすさを向上させるため、$sort
, $slice
, $each
modifiersのサポートを強化しました。
また、$push
オペレーターには$position
modifierが追加されました。
訳注: $position
については後ほど説明があります。
詳細情報: $push
$each
Modifierの変更
$sort
, $slice
, $position
modifireと合わせて使用する場合、$each
は$push
の最初のmodifierである必要はなくなりました。
詳細情報: $each
$sort
Modifierのエンハンス
$sort
を使って、通常の配列を並び替えることができるようになりました。
訳注: これまでのバージョンでは、ドキュメントを要素として持つ配列のみソートできました。
この変更は、ドキュメントではない配列の要素を使ったソートができることを意味します。
また、もし配列の要素がドキュメントだった場合、ドキュメントのフィールド指定だけでなく、ドキュメント全体でのソートが可能です。
訳注: つまり、通常の配列である
array[12, 43, 6, 89, 77, 90]
もソートできるようになりました。
また、ドキュメントの配列である
array[
{ id: 3, score: 8 },
{ id: 4, score: 7 },
{ id: 5, score: 6 }
]
では、フィールドを指定してもしなくてもソートができるようになりました。
フィールドを指定しなかった場合は、第1要素(上記の場合はid)でソートされます。
$sort
は、もはや$slice
を必要としません。
詳細情報: $sort
$slice
Modifierのエンハンス
$slice
modifierが整数値の指定できるようになりました。整数値を指定すると、配列の前から数えた要素数番目でスライスします。
訳注: 例えば、$sort
といっしょに使うと、”配列をソートして上位3つを切り出す”という処理ができます。
詳細情報: $slice
$position
Modifire
$position
modifierは、$push
オペレーターを使った際に、値を挿入する箇所を明示的に指定できます。
詳細情報: $position