1

私は知っています、mongoDBにはトランザクションサポートがありません。しかし、今度はドキュメントの値を読み取り、1ずつインクリメントして、新しい値を書き込む必要があります。

または-別の方法:要素を更新し、同時に値を読み取ります。このために私は検索と変更を使用するのが好きです:http ://www.mongodb.org/display/DOCS/findAndModify+Command

このコマンドはドキュメントを更新し、更新する前に値を返します。これは(同じように)トランザクションで発生しますか?重要なのは、他のセッションが他のセッションの2つのステップ間で同じ値を更新する可能性があるかどうかです。

(申し訳ありませんが、私にとって説明するのは難しいです-私が言おうとしていることをあなたが理解してくれることを願っています)

ありがとうございました。

4

2 に答える 2

6

findAndModifyコマンドはアトミックです。つまり、findmodifyパーツ間で他の操作を実行することはできません。このコマンドは、カウンター/設定フラグのインクリメントとそれらの読み取りを同時に行うために作成されました。

于 2012-07-04T15:15:05.857 に答える
0

私はまだ原子性について疑問を持っています。

「UpsertandUniqueIndex¶」セクションのここhttp://docs.mongodb.org/manual/reference/command/findAndModify/

複数のクライアントが同時にクエリ操作を実行でき、その後、更新操作を実行するように記述されています。

findAndModifyコマンドにupsert:trueオプションが含まれていて、クエリフィールドに一意のインデックスが付けられていない場合、特定の状況では、コマンドがドキュメントを複数回挿入する可能性があります。

コマンドが変更フェーズを開始する前にすべてのコマンドがクエリフェーズを終了し、名前フィールドに一意のインデックスがない場合、コマンドはそれぞれアップサートを実行し、複数の重複ドキュメントを作成する可能性があります。

アトミックである場合は、当面は読み取り/書き込みロックを想定する必要があるため、他の接続が「クエリフェーズ」を実行できなくなります。

アップサートフラグのみの場合ですか?新しいドキュメントを作成するので、ドキュメントの一致が見つかったときに問題がない可能性があり、その場合は本質的にアトミックで動作します。誰かが明確にできますか?

于 2015-05-12T08:16:56.100 に答える