MongoDB richiede che ogni documento archiviato nel database abbia un campo (a livello di root) chiamato "_id".
Il driver C# presuppone che qualsiasi campo della classe denominato "Id", "id" o "_id" debba essere mappato al campo speciale "_id". Questa è una convenzione, che può essere ignorata. Il driver C# non sa che la tua classe Result non è pensata per essere usata come documento radice di una raccolta, quindi trova il tuo campo "id" e lo associa a "_id" nel database.
Un modo per ignorarlo è cambiare il nome del campo nella tua classe (come hai scoperto). Ciò che puoi anche fare è utilizzare l'attributo [BsonElement] per mappare il nome del tuo campo C# (ad es. "idd") a qualsiasi nome venga effettivamente utilizzato nel database (ad es. "id"). Ad esempio:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Un'altra alternativa consiste nell'overridere la convenzione che trova il membro "Id" di una classe per eliminare il comportamento predefinito del driver C# per la classe Result. Puoi farlo registrando un nuovo ConventionProfile per la tua classe Result. Ad esempio:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Devi assicurarti di farlo molto presto nel tuo programma, prima che la tua classe dei risultati venga mappata.