sql >> Databáze >  >> NoSQL >> MongoDB

Promítání na jiný typ pomocí C# SDK

Našel jsem způsob, jak provést mapování, které chcete:

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

Nejprve byste si ale měli zaregistrovat mapování pro váš podtyp s ignorováním nadbytečných prvků. Nerozumím tomu na 100 %, zdá se, že jde o chybu ovladače, nedostává Documents z mongo, ale ví, že MyType má takovou vlastnost. Všimněte si, že byste měli zaregistrovat své mapování třídy před nejprve vytvoříte kolekci tohoto typu.

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

Udělal jsem to s ukázkovými daty:

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

A mohl získat očekávaný výstup:

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




  1. HBase BlockCache 101

  2. Použití $unwind a $text v agregačním rámci mongodb

  3. Jak přenést instanci výpočetního stroje Google?

  4. Mohu použít $project k vrácení pole jako dokumentu nejvyšší úrovně v mongo agregačním dotazu?