sql >> Databasteknik >  >> NoSQL >> MongoDB

Projicera till en annan typ med C# SDK

Jag har hittat sättet att utföra mappningen du vill ha:

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 bör du registrera mappning för din SubType med att ignorera extra element. Jag förstår det inte till 100 %, det verkar vara en bugg hos drivrutinen, den får inte Documents från mongo, men vet att MyType har sådan egendom. Observera att du bör registrera din klasskartläggning före du skapar först en samling av denna typ.

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

Jag gjorde det med exempeldata :

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

Och kunde få den förväntade produktionen:

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




  1. Index skärningspunkt vs sammansatt index?

  2. Vad är det korrekta sättet att indexera i MongoDB när stora kombinationer av fält finns

  3. Spring Data MongoDB:BigInteger till ObjectId-konvertering

  4. Redis 10 gånger mer minnesanvändning än data