title: C# MongoDb Driver Question Update Failing
body: <p>Here is the situation. I am inserting a new post and after insert I fetch the post and it works fine. Then I change one field and update which works fine. The problem occurs when I try to fetch the same post after the update. It always returns null. </p>
  
  <pre><code>     public class Post
          {
              public string _id { get; set; }
              public string Title { get; set; }
              public string Body { get; set; }
          }
  
   // insert a post 
          var post = new Post() {Title = "first post", Body = "my first post"};
          var posts = _db.GetCollection("posts");
          var document = post.ToDocument();
  
          // inserts successfully! 
          posts.Insert(document);
  
          // now get the post 
          var spec = new Document() {{"_id", document["_id"]}};
  
          // post was found success
          var persistedPost = posts.FindOne(spec).ToClass&lt;Post&gt;();
  
          persistedPost.Body = "this post has been edited again!!";
          var document2 = persistedPost.ToDocument(); 
          // updates the record success although I don't want to pass the second parameter
          posts.Update(document2,spec);
  
          // displays that the post has been updated
          foreach(var d in posts.FindAll().Documents)
          {
              Console.WriteLine(d["_id"]); 
              Console.WriteLine(d["Body"]);
          }
  
      // FAIL TO GET THE UPDATED POST. THIS ALWAYS RETURNS NULL ON FindOne call! 
      var updatedPost = posts.FindOne(new Document() {{"_id",document["_id"]}}).ToClass&lt;Post&gt;(); // this pulls back the old record with Body = my first post
      Assert.AreEqual(updatedPost.Body,persistedPost.Body);
  </code></pre>
  
  <p><strong>UPDATE:</strong> </p>
  
  <p>I think I have resolved the problem but the issue is very weird. See the last line. </p>
  
  <pre><code>var updatedPost = posts.FindOne(new Document() {{"_id",document["_id"]}}).ToClass&lt;Post&gt;();
  </code></pre>
  
  <p>The FindOne method takes new document which depends on document["_id"]. Unfortunately, that does not work and for some reason it requires you to send the _id associated with persistedPost update which you will get after the update command. Here is the example: </p>
  
  <pre><code> var persistedPost = posts.FindOne(spec).ToClass&lt;Post&gt;();
              persistedPost.Body = "this is edited";
              var document2 = persistedPost.ToDocument(); 
              posts.Update(document2,new Document() {{"_id",document["_id"]}});
  
              var updatedPost = posts.FindOne(new Document(){{"_id",document2["_id"]}}).ToClass&lt;Post&gt;(); 
              Console.WriteLine(updatedPost.Body);
  </code></pre>
  
  <p>See, now I am sending the document2["_id"] instead of the document field. This seems to work correctly. I guess the 24 byte code that it generates for each "_id" field is different. </p>