sql >> Database >  >> NoSQL >> MongoDB

Projecteren naar een ander type met behulp van de C# SDK

Ik heb de manier gevonden om de gewenste mapping uit te voeren:

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

Maar eerst moet u mapping voor uw SubType registreren met het negeren van extra element. Ik begrijp het niet 100%, het lijkt een bug van de driver te zijn, het krijgt geen Documents uit mongo, maar weet dat MyType heeft een dergelijke eigenschap. Let op, je moet je klastoewijzing registreren, vóór u maakt eerst een verzameling van dit type aan.

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

Ik deed het met voorbeeldgegevens:

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

En kon de verwachte output krijgen:

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




  1. Mongoose:hoe update ik *alle* personen die aan een aandoening voldoen?

  2. MongoDB installeren en gebruiken in Grails 3.x

  3. Gegevens uit MongoDB (gridfs) lezen via Matlab en Java-stuurprogramma

  4. Groepeer en tel over een begin- en eindbereik