MongoDB exige que chaque document stocké dans la base de données ait un champ (au niveau racine) appelé "_id".
Le pilote C# suppose que tout champ de votre classe appelé "Id", "id" ou "_id" est destiné à être mappé sur le champ spécial "_id". Il s'agit d'une convention, qui peut être outrepassée. Le pilote C# ne sait pas que votre classe Result n'est pas destinée à être utilisée comme document racine d'une collection, il trouve donc votre champ "id" et le mappe à "_id" dans la base de données.
Une façon de remplacer cela consiste à changer le nom du champ dans votre classe (comme vous l'avez découvert). Ce que vous pouvez également faire est d'utiliser l'attribut [BsonElement] pour mapper votre nom de champ C# (par exemple "idd") à n'importe quel nom réellement utilisé dans la base de données (par exemple "id"). Par exemple :
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Une autre alternative consiste à remplacer la convention qui trouve le membre "Id" d'une classe pour supprimer le comportement par défaut du pilote C# pour votre classe Result. Vous pouvez le faire en enregistrant un nouveau ConventionProfile pour votre classe de résultats. Par exemple :
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Vous devez vous assurer de le faire très tôt dans votre programme, avant que votre classe Result ne soit mappée.