sql >> Base de Datos >  >> NoSQL >> MongoDB

Asignación de propiedades que no distingue entre mayúsculas y minúsculas

Para hacer eso creo que tendrás 2 opciones.

La primera sería escribir un mapa de clase manualmente

BsonClassMap.RegisterClassMap<MyClass>(cm => {
    cm.AutoMap();
    cm.GetMemberMap(c => c.Foo).SetElementName("foo");
});

La segunda sería decorar tu clase con los siguientes atributos

public class MyObj
{
    [BsonElement("id")]
    public int Id { get; set; }
    
    [BsonElement("foo")]
    public string Foo { get; set; }
}

El equipo de controladores de CSharp tiene un buen tutorial sobre serialización en el siguiente enlace

http://docs.mongodb.org/ ecosistema/tutorial/serializar-documentos-con-el-controlador-csharp/

Actualizar

Acabo de intentar lo siguiente y esto funciona para mí, obviamente estoy seguro de que esta es una versión mucho más simplificada de su código, pero adivino cómo podría verse.

Registré los dos mapas de clase por separado y agregué BsonKnownType a la clase base.

[BsonKnownTypes(typeof(GeoJSONObject))]
public class Point
{
    public string Coordinates { get; set; }
}

public class GeoJSONObject : Point
{
    public string Type { get; set; }
}

static void Main(string[] args)
{
    var cn = new MongoConnectionStringBuilder("server=localhost;database=MyTestDB;");
    var settings = MongoClientSettings.FromConnectionStringBuilder(cn);
    var client = new MongoClient(settings);

    BsonClassMap.RegisterClassMap<Point>(cm =>
    {
        cm.AutoMap();
        cm.GetMemberMap(c => c.Coordinates).SetElementName("coordinates");                   
    });

    BsonClassMap.RegisterClassMap<GeoJSONObject>(cm =>
    {
        cm.AutoMap();
        cm.GetMemberMap(c => c.Type).SetElementName("type");
    });

    var result = client.GetServer()
              .GetDatabase("MyTestDB")
              .GetCollection("MyCol")
              .Find(Query.EQ("type", BsonValue.Create("xxxx")));
}