MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Projekcja do innego typu przy użyciu C# SDK

Znalazłem sposób na wykonanie żądanego mapowania:

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

Ale najpierw powinieneś zarejestrować mapowanie dla swojego SubType z ignorowaniem dodatkowego elementu. Nie rozumiem tego w 100%, wydaje się, że to błąd sterownika, nie pobiera Documents od mongo, ale wie, że MyType ma taką właściwość. Uwaga, mapowanie klas należy zarejestrować przed najpierw tworzysz kolekcję tego typu.

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

Zrobiłem to z przykładowymi danymi :

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

I może uzyskać oczekiwany wynik:

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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb i max połączenia

  2. Jak znaleźć dokument według części ObjectId?

  3. MongoDb istnieje na kolumnę

  4. Jak utworzyć użytkownika w MongoDB

  5. Dlaczego otrzymuję to przestarzałe ostrzeżenie?! MongoDB