2012-02-22 5 views
5

MongoDBと最新の10gen C#ドライバ(CSharpDriver-1.3.1.4349)を使用して、「インプレース」アップデートを行い、結果で影響を受けるドキュメントの数を取得しようとしています。更新後にSafeModeResultがnullになる

public static long SaveListings(string state, bool isActive, DateTime updateDate) 
{ 
    var result = Collection().Update(
    Query.And(
     Query.EQ("State", state), 
     Query.And(
      Query.EQ("IsActive", isActive), 
      Query.LT("UpdateDate", updateDate))), 
    Update.Set("IsActive", false), UpdateFlags.Multi); 
    return result != null ? result.DocumentsAffected : -1; 
} 

結果は何らかの理由でnullです。私が間違ってやっているか、これはC#のドライバのバグが何であるかを

db.Listing.update({ State: state.Abbreviation, IsActive: true, UpdateDate: { $lt: expiredDate } }, { $set: { IsActive: false } }, false, true); 
var numRows = db.getLastErrorObj().n; 

任意のアイデア:私は、コンソールからこれをやっていたならば、私はこれを行うことによって達成された行の数を得ることができますか?

答えて

6

更新プログラムには、SafeModeを使用するオーバーロードされたメソッドが含まれています。ちょうどあなたの更新に第四パラメータとして、あなたのコードに追加し、nullではないようになります。予想通り、ドライバのバグではありません

... 
UpdateFlags.Multi, 
SafeMode.True); 

は、それが動作します。 Mongodbはセーフモードなしで(つまりドライバがnullを返す)挿入されるとドキュメントを待たず、SafeMode = trueと言った場合、ドキュメントが挿入されるまでmongodbを強制的に待機させます。

+0

感謝を!私はセーフモードがどのように機能するのか知っていますが、接続がデフォルトでセーフモードを使用すると誤って想定していました。 – Justin

+0

私は同じ問題を抱えていましたが、現在のドライバはgetLastErrorを明示的に使用しているときに認証に問題があることに注意してください。 prob()が固定されるまで、代わりにSafeMode.Trueを使用することを推奨するRobert(dev at 10gen) https://jira.mongodb.org/browse/CSHARP-390を参照してください。 – sambomartin

4

セーフモードを指定せずに挿入や更新を行うと、非同期操作であるため、nullが返されます。挿入や更新がどのように行われたかは分かりません。

したがって、 SafeMode.Trueは、結果を気にする場合の挿入と更新の最後の引数です。

var result = collection.Update(query, update, SafeMode.True); 

をあなたが​​と異なる安全モードhere (general)here (SafeMode with the C# driver)に関するいくつかの詳細を読むことができます:これは、ブロック挿入は/更新されるまでは完了したドライバの問題​​コマンドを行います。

関連する問題