MongoDB kräver att varje dokument som lagras i databasen har ett fält (på rotnivå) som heter "_id".
C#-drivrutinen antar att alla fält i din klass som heter "Id", "id" eller "_id" är avsedda att mappas till det speciella "_id"-fältet. Detta är en konvention som kan åsidosättas. C#-drivrutinen vet inte att din resultatklass inte är avsedd att användas som rotdokument för en samling, så den hittar ditt "id"-fält och mappar det till "_id" i databasen.
Ett sätt du kan åsidosätta detta är att ändra namnet på fältet i din klass (som du upptäckt). Vad du då också kan göra är att använda [BsonElement]-attributet för att mappa ditt C#-fältnamn (t.ex. "idd") till det namn som faktiskt används i databasen (t.ex. "id"). Till exempel:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Ett annat alternativ är att åsidosätta konventionen som hittar "Id"-medlemmen i en klass för att undertrycka standardbeteendet för C#-drivrutinen för din resultatklass. Du kan göra detta genom att registrera en ny ConventionProfile för din resultatklass. Till exempel:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Du måste se till att göra detta mycket tidigt i ditt program, innan din resultatklass kartläggs.