2016-12-02 149 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變量它仍然是錯誤的。我在服務器上檢查也沒有更換文件。有時它的工作有時不起作用。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應該可以正常工作。
但默認情況下,此方法返回原始文檔。 您可以將ReturnDocument更改爲ReturnDocument.After以查看更改後的文檔。

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