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

Projicering til en anden type ved hjælp af C# SDK

Jeg har fundet den måde at udføre den ønskede kortlægning på:

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

Men først skal du registrere kortlægning for din undertype med at ignorere ekstra element. Jeg forstår det ikke 100 %, ser ud til at være en fejl i driveren, den får ikke Documents fra mongo, men ved, at MyType har en sådan ejendom. Bemærk, du bør registrere din klassekortlægning, før du opretter først en samling af denne type.

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

Jeg gjorde det med eksempeldata :

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"}},
};

Og kunne få det forventede output:

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




  1. Klasse 'MongoDB\Client' blev ikke fundet, mongodb-udvidelsen er installeret

  2. Forespørger om intern matrixstørrelse i MongoDB

  3. Robust meddelelsesserialisering i Apache Kafka ved hjælp af Apache Avro, del 1

  4. Meteor-publikation:Skjuler bestemte felter i et array-dokumentfelt?