C#Mongodb FindOneAndReplace或ReplaceOne无法正常工作

Cod*_*low 5 c# mongodb mongodb-.net-driver

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);
        }
Run Code Online (Sandbox Code Playgroud)

以下是调试输出。我的文档没有被替换。检查SuccesslConnect变量,它仍然为false。我在服务器上检查了文件也没有替换。有时它工作,有时不工作。

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
Run Code Online (Sandbox Code Playgroud)

rno*_*nko 6

方法FindOneAndReplaceAsync应该可以正常工作。
但默认情况下,此方法返回原始文档。您可以更改ReturnDocumentReturnDocument.After查看更改后的文档。

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