Potýkal jsem se se stejným problémem. Po ladění v kódu MongoDB jsem viděl, že při použití rozhraní je místo konkrétního typu použit jiný serializátor. V tomto případě DiscriminatedInterfaceSerializer se používá jako serializátor pro rozhraní, zatímco BsonClassMapSerializer se používá pro konkrétní typ.
S tímto serializátorem pro rozhraní není třída implementující třídy propojena s rozhraním. Proto si není vědom, že Id je pole bson id a mělo by být mapováno na klíč '_id'. Proto je vznesena výjimka.
Řešením, které se mi osvědčilo, je použití ImpliedImplementationInterfaceSerializer :
[BsonSerializer(typeof(ImpliedImplementationInterfaceSerializer<IEntity, Entity>))]
public interface IEntity
{
// snip...
}
Tento atribut registruje serializátor a definuje použití třídní mapy bson entity pro IEntity, takže vlastnost Id bude správně mapována. Toto řešení jsem našel díky @Robert Baker ve své odpovědi zde:Deserializovat objekt jako rozhraní pomocí MongoDB C# Driver