MongoDB requiere que cada documento almacenado en la base de datos tenga un campo (en el nivel raíz) llamado "_id".
El controlador de C# asume que cualquier campo de su clase llamado "Id", "id" o "_id" debe asignarse al campo especial "_id". Esta es una convención, una que puede ser anulada. El controlador de C# no sabe que su clase Result no debe usarse como el documento raíz de una colección, por lo que encuentra su campo "id" y lo asigna a "_id" en la base de datos.
Una forma de anular esto es cambiar el nombre del campo en su clase (como descubrió). Lo que también puede hacer es usar el atributo [BsonElement] para asignar su nombre de campo C# (por ejemplo, "idd") a cualquier nombre que se esté usando en la base de datos (por ejemplo, "id"). Por ejemplo:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Otra alternativa es anular la convención que encuentra el miembro "Id" de una clase para suprimir el comportamiento predeterminado del controlador C# para su clase Result. Puede hacerlo registrando un nuevo ConventionProfile para su clase de resultado. Por ejemplo:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Debe asegurarse de hacer esto muy temprano en su programa, antes de que se asigne su clase de resultado.