sql >> Database teknologi >  >> NoSQL >> MongoDB

Kortlægning af ejendomme uden store og små bogstaver

For at gøre det tror jeg, du har 2 muligheder.

Den første ville være at skrive et klassekort manuelt

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

Den anden ville være at dekorere din klasse med følgende egenskaber

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

CSharp-førerteamet har en god vejledning om serialisering på følgende link

http://docs.mongodb.org/ økosystem/tutorial/serialize-documents-with-the-csharp-driver/

Opdater

Jeg har lige prøvet følgende, og det virker for mig. Jeg er selvfølgelig sikker på, at dette er en meget mere forenklet version af din kode, men jeg vil gerne gætte på, hvordan den kan se ud.

Jeg har registreret de to klassekort separat og tilføjet BsonKnownType til basisklassen.

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

  1. MongoDB med C# - forespørgsel med dynamisk genereret prædikat

  2. returner kun en enkelt egenskab _id

  3. MongoDB $time

  4. Indsættelse af Date() i Mongodb gennem mongo shell