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

Projizieren auf einen anderen Typ mit dem C# SDK

Ich habe den Weg gefunden, um das gewünschte Mapping auszuführen:

collection
    .Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
    .Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
    .As<MySubType>()
    .ToList();

Aber zuerst sollten Sie die Zuordnung für Ihren SubType registrieren, wobei Sie das zusätzliche Element ignorieren. Ich verstehe es nicht 100%, scheint ein Fehler des Treibers zu sein, es bekommt keine Documents von mongo, weiß aber, dass MyType hat ein solches Eigentum. Beachten Sie, dass Sie Ihre Klassenzuordnung vorher registrieren sollten Sie erstellen zuerst eine Sammlung dieses Typs.

if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
    BsonClassMap.RegisterClassMap<MySubType>(cm =>
    {
        cm.AutoMap();
        cm.SetIgnoreExtraElements(true);
    });
}

Ich habe es mit Beispieldaten gemacht:

var toInsert = new List<MyType>
{
    new MyType {Id = 1, Name = "bla", Documents =new List<string> {"a", "b", "v"}},
    new MyType {Id = 2, Name = "ada", Documents =new List<string> {"c", "d", "r"}},
};

Und könnte die erwartete Ausgabe erhalten:

collection
    .Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
    .Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
    .As<MySubType>()
    .ToList()
    .Dump();