title: Dollar prefixed field not valid for storage
body: <p>I got this error: </p>
  
  <pre><code>panic: multiple write errors: [{write errors: [{The dollar ($) prefixed field '$set' in 'conversations.newest_message.$set' is not valid for storage.}]}, {&lt;nil&gt;}]
  </code></pre>
  
  <p>Here is the data I want to update, and I want to update newest_message inside conversations:</p>
  
  <pre><code>{
      "_id" : "iNIXU8dgLgg-KdC3FE1hX8qBpY44hTF-2m-h-RG1",
      "conversations" : [ 
          {
              "conversation_id" : "VOoHg7nY4xBcrQtzxokbM9aStSSqei44",
              "newest_message" : {
                  "user_name" : "",
                  "data" : {
                      "description" : "",  
                  },
              }
          }
      ]
  }
  </code></pre>
  
  <p>Here is the mongoldb query: </p>
  
  <pre><code>db.collectionA.update(
      {
          _id: "iNIXU8dgLgg-KdC3FE1hX8qBpY44hTF-2m-h-RG1", 
          "conversations.conversation_id": "VOoHg7nY4xBcrQtzxokbM9aStSSqei44"
      },
      {
          "$set": {
              "conversations.$.newest_message": {new_update_data_here}
      }
  )
  </code></pre>
  
  <p>and here is the Golang code, I'm using mongodb driver not mgo:</p>
  
  <pre><code>filter = bson.M{
                      "_id":                           id,
                      "conversations.conversation_id": messageReceived.ConversationID,
                  }
  update = bson.M{
                      "$set": bson.M{
                          "conversations": bson.M{
                              "newest_message": newestMessage,
                          },
                      },
                  }
  
  _, err = d.DB.Collection(collectionUserInformation).UpdateOne(ctx, filter, update)
              if err != nil {
                  panic(err)
              }
  </code></pre>