MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Memproyeksikan ke tipe lain menggunakan C# SDK

Saya telah menemukan cara untuk mengeksekusi pemetaan yang Anda inginkan:

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

Tetapi pertama-tama Anda harus mendaftarkan pemetaan untuk SubType Anda dengan mengabaikan elemen tambahan. Saya tidak mengerti 100%, sepertinya bug dari driver, tidak mendapatkan Documents dari mongo, tetapi ketahuilah, bahwa MyType memiliki properti seperti itu. Catatan, Anda harus mendaftarkan pemetaan kelas Anda, sebelum Anda pertama kali membuat koleksi jenis ini.

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

Saya melakukannya dengan sampel data :

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

Dan bisa mendapatkan hasil yang diharapkan:

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. Dengan mongodb dan panduan untuk Id dokumen, apa cara efisien untuk menyimpan Panduan untuk dengan mudah mengambil Panduan yang sebenarnya?

  2. Tidak dapat menjalankan robomongo.sh menggunakan sh robomongo.sh di Ubuntu 14.04

  3. contoh driver mongodb-erlang Erlang

  4. Mengoptimalkan Tugas Aliran Udara yang mentransfer data dari BigQuery ke MongoDB

  5. Bagaimana cara memperbarui bidang dokumen MongoDB hanya jika tidak ada?