MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Eigenschaftszuordnung ohne Berücksichtigung der Groß-/Kleinschreibung

Dazu haben Sie meiner Meinung nach 2 Möglichkeiten.

Die erste wäre, eine Klassenzuordnung manuell zu schreiben

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

Die zweite wäre, Ihre Klasse mit den folgenden Attributen zu dekorieren

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

Das CSharp-Treiberteam bietet unter folgendem Link ein gutes Tutorial zur Serialisierung

http://docs.mongodb.org/ Ökosystem/Tutorial/Dokumente-mit-dem-csharp-Treiber-serialisieren/

Aktualisieren

Ich habe gerade Folgendes ausprobiert und das funktioniert für mich. Natürlich bin ich sicher, dass dies eine viel vereinfachtere Version Ihres Codes ist, aber ich schätze, wie es aussehen könnte.

Ich habe die beiden Klassenkarten separat registriert und den BsonKnownType zur Basisklasse hinzugefügt.

[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")));
}