2016-08-01 8 views
2

名前FindOneAndUpdate()から、これはアトミック操作であると私は理解しています。C#MongoDb FindAndUpdate(多く)

10個のアイテム(制限(10))を見つけて同様に更新したい場合はどうすればよいですか?
たとえば、状態フィールドを「進行中」に設定しますか?

これはMongoDbで原子的に達成可能ですか?多分C#ドライバに組み込みの機能がいくつかありますか? 私は他の消費者にも文書を要求していますので、私は二重処理を避けたいのですが、それはビジネス上重要ではありません。

モチベーションFindOneAndUpdate()を使用するのは10回だけで、ネットワーキング(チャットは少なく、パフォーマンスは向上)です。私はトランザクションのような行動の要件を持っていません。

データベースもビジネスケースも私の管理下にありますが、多くの書類がやや早く出入りすると言われました。

答えて

0

MongoDBでは、操作はドキュメントごとにアトミックであるとみなされます。つまり、ドキュメント内の複数のフィールドを1つの更新ステートメントで更新すると、すべての更新が取得されるか、更新が行われている間に照会される必要があります。つまり、複数のドキュメントに影響を与える更新は、すべてのドキュメントのアトミック操作ではなく、ドキュメント内のアトミックになります。

それはあなたがサーバーにコマンドを送信して、より効率的であると懸念しているように聞こえるので、それほどではないにようか否かの操作がアトミックサーバ側では、あなたは上の実行するアップデートのIEnumerable<WriteModel<TDocument>>をとるBulkWriteAsync()を使用することができていますサーバー。

これにより、リストの更新を構築して、1回の操作でそれらをサーバーに実行できます。失敗した書き込みを適切に処理するには、このプロセス中に注意が必要です。この上のMongoDBドキュメントをhereで見てください。

関連する問題