0

アプリケーションのテスト中に奇妙な動作に遭遇しました。複数のドキュメントを更新し、これらのフィールドの1つを1つ増やします(他のフィールドも-1つ減らしますが、これがポイントだとは思わないでください)。

Query = { "_id" : { "$in" : [ObjectId("4fbf8481a975b5237c56f221"),
                             ObjectId("4fbf8481a975b5237c56f222"),
                             ObjectId("4fbf8481a975b5237c56f223")] } };
Update = { "$inc" : { "PartlyCompleted" : -1, "Completed" : 1 } }

最初のドキュメントは正常に更新されますが、他の2つのドキュメントは影響を受けません。

その理由は何でしょうか。どこを見ればいいのか教えてください。

いくつかの追加情報。C#の公式ドライバーを使用しています。コードの一部を次に示します。

_personsId = new BsonArray();
_personsId.AddRange(personsId.Where(x => DataService.IsIdValid(x)).
                              Select(x => new ObjectId(x)).ToArray());

var query = Query.In("_id", _personsId);
var update = Update.Combine(
                    Update.Inc("Completed", 1 ),
                    Update.Inc("PartlyCompleted", -1));

DataService.PersonSet.Collection.Update(query, update);

以下のクエリで返されたドキュメントの数も確認しましたが、3です。

    var count = DataService.PersonSet.Collection.Count(query);
4

1 に答える 1

3

デフォルトでは、更新は最初に一致したドキュメントのみに影響します。

したがって、あなたの例では、mongo はこれら 3 つのドキュメントの 1 つを選択し、カウンターをインクリメントします。UpdateFlags.Multi複数のドキュメントを更新するには、フラグを設定する必要があります。

興味がありますが、このフラグを他のアップデートで使用していますか? はいの場合、なぜその質問ですか? いいえの場合、それらの更新は一度に複数のドキュメントに影響しますか?

于 2012-05-25T13:39:30.107 に答える