Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

アトミック操作のモデルデータ

項目一覧

  • パターン

MongoDB はレプリカセットとシャーディングされたクラスターを対象にマルチドキュメントトランザクションをサポートしていますが、多くのシナリオにおいて、このページで説明する非正規化データモデルは引き続きデータやユースケースに最適です。

MongoDB では、1 つのドキュメントに対する書込み (write) 操作は不可分です。 一緒に更新する必要があるフィールドの場合、同じドキュメント内にフィールドを埋め込むことで、フィールドを不可分的に更新できるようになります。

たとえば、チェックアウト可能なコピーの数や現在のチェックアウト情報など、書籍に関する情報を保持する必要がある状況を考えてみましょう。

書籍の利用可能なコピーとチェックアウト情報は同期されている必要があります。 そのため、同じドキュメント内に availableフィールドとcheckoutフィールドを埋め込むと、2 つのフィールドを不可分的に更新できるようになります。

{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly",
available: 3,
checkout: [ { by: "joe", date: ISODate("2012-10-15") } ]
}

次に、新しいチェックアウト情報で更新するために、 db.collection.updateOne()メソッドを使用してavailableフィールドとcheckoutフィールドの両方を不可分的に更新します。

db.books.updateOne (
{ _id: 123456789, available: { $gt: 0 } },
{
$inc: { available: -1 },
$push: { checkout: { by: "abc", date: new Date() } }
}
)

この操作は、操作のステータスに関する情報を含むドキュメントを返します。

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

matchedCountフィールドは1ドキュメントが更新条件に一致したことを示し、 modifiedCountは操作によって1ドキュメントが更新されたことを示します。

更新条件に一致するドキュメントがない場合、 matchedCountmodifiedCount0になり、書籍をチェックアウトできないことを示します。

戻る

特定のアプリケーションコンテキスト

項目一覧