2016-12-02 4 views
2
public async Task SomeWork() 
     { 
      Debug.WriteLine("SomeWork for User : " + Context.User.Identity.Name); 
      var userProfile = await UserProfileCollection.Find(u => u._id == Context.User.Identity.Name).FirstOrDefaultAsync(); 

      userProfile.SuccessfullConnect = true; // currently false 
      var up = await UserProfileCollection.FindOneAndReplaceAsync(u => u._id == userProfile._id, userProfile); 
      Debug.WriteLine(ObjectDumper.Dump(userProfile)); 
      Debug.WriteLine(ObjectDumper.Dump(up)); 
      Debug.WriteLine("Saved SomeWork for User : " + Context.User.Identity.Name); 
     } 

以下はデバッグ出力です。私の文書は置き換えられません。 SuccessfullConnect変数がまだfalseであることを確認します。私はサーバー上でチェックしたドキュメントも置き換えられません。そしていつかはその仕事と時にはそれが働かない。C#Mongodb FindOneAndReplaceまたはReplaceOneが機能しない

SomeWork for User : +919933221101 
{TestSignalR_Server.Models.UserProfile} 
    _id: "+919933221101" 
    ... 
    SuccessfullConnect: True 
    ... 

{TestSignalR_Server.Models.UserProfile} 
    _id: "+919933221101" 
    ... 
    SuccessfullConnect: False 
    ... 

Saved SomeWork for User : +919933221101 

答えて

2

方法FindOneAndReplaceAsyncは正常に動作するはずです。
しかし、このメソッドはデフォルトで元のドキュメントを返します。 ReturnDocumentReturnDocument.Afterに変更すると、変更後のドキュメントが表示されます。

var options = new FindOneAndReplaceOptions<Profile> 
{ 
    ReturnDocument = ReturnDocument.After 
}; 
var up = await collection.FindOneAndReplaceAsync<Profile>(u => u._id == userProfile._id, userProfile, options); 
関連する問題