0

編集========================

コレクションに10個のドキュメントがあり、その中にランダムなドキュメントを予約して、他のリクエストでもそれを使用できないようにしたいとします。その目的のために、ドキュメントが設定された後、アトミック$setとフィールド「taken」を使用していますtrue「取得」すると、クエリに参加しなくなるため、データベースへの他の要求で使用できなくなります。唯一の問題は、「取得」された後、ドキュメントを取得する方法がわからないことです。更新されていました。

編集========================

変更されたばかりのドキュメントを取得するのに苦労しています。

例:

サンプル文書:

{"_id":"a...", "age":23, "taken": false}

{"_id":"b...", "age":25, "taken": true},

{"_id":"c...", "age":27, "taken": false},

{"_id":"d...", "age":27, "taken": true},

{"_id":"e...", "age":29, "taken": false},

{"_id":"f...", "age":29, "taken": false}

コード:

collection.Update(Query.And(Query.GTE("age", 26), Query.EQ("taken", false)), Update.Set("taken", true));

「盗まれた」記録を取得する方法が必要なのですが、それを行う方法はありますか?

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

4

2 に答える 2

3

'FindAndModify' メソッドを使用して、単一のドキュメントを更新し、そのドキュメントを返すことができます。

var query = Query.And(Query.GTE("age", 26), Query.EQ("taken", false));
var update = Update.Set("taken", true);

var result = collection.FindAndModify(
    query, 
    update, 
    true // return new document
);

var chosenDoc = result.ModifiedDocument;

C# のドキュメントはこちらにあり、findAndModify に関する一般的な情報はこちらにあります。

于 2012-11-12T16:54:37.570 に答える
2

C# ドライバーには、最後に更新されたドキュメントを返すことができる "FindAndModify" メソッドがあります

于 2012-11-12T07:44:06.750 に答える