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

MongoDB c# mengambil semua elemen yang cocok dalam array di dalam dokumen menggunakan pembuat Definisi

Pertanyaannya tidak sepenuhnya menggambarkan kasus penggunaan jadi saya telah menemukan beberapa opsi potensial untuk Anda jelajahi berdasarkan beberapa asumsi, khususnya mereka bergantung pada LINQ yang tersedia dan untuk menargetkan satu dokumen pada satu waktu ( dan Anda mungkin tidak menginginkan lebih banyak kode daripada yang sebenarnya Anda butuhkan):

1) Variasi pada apa yang Anda miliki. Gunakan find standar dengan proyeksi dan ekspresi LINQ.

var projection = Builders<ShapeDocument>.Projection
    .Expression(x => x.fooArray.Where(y => y.plot == "circle"));

var items1 = collection
    .Find(x => x.user == "Jone Doe")
    .Project(projection)
    .ToList();

2) Gunakan jalur agregasi (Anda bisa menggunakan proyeksi yang sama seperti di atas)

var pipeline = collection
    .Aggregate()
    .Match(x => x.user == "Jone Doe")
    .Project(i => new
            {
                x = i.fooArray.Where(x => x.plot == "circle")
            });

var items2 = pipeline.SingleOrDefault();

3) Tarik dokumen kembali dengan semua elemen array kemudian filter secara lokal menggunakan LINQ. Di sisi positifnya, ini adalah sejumlah kecil kode yang dapat dibaca, namun, ini mengembalikan seluruh dokumen sebelum memfilter. Tergantung pada penggunaan yang tepat Anda, ini mungkin dapat diterima.

var items3 = collection.AsQueryable()
    .SingleOrDefault(x => x.user == "Jone Doe")
    .fooArray.Where(x => x.plot == "circle");

Jika LINQ benar-benar bukan pilihan maka ada contoh di sini yang menunjukkan bagaimana Anda dapat mengubah proyeksi menjadi bukan kami LINQ. Benar-benar belum teruji tetapi akan menjadi sesuatu di sepanjang baris:

var filter = new BsonDocument {
 {"input", "$items"},
 {"as", "item" },
 {"cond", new BsonDocument {
     // Fill in the condition values
     { "", new BsonArray { "", xxx } } }
   }
 };

var project = new BsonDocument {
 { "items", new BsonDocument { { "$filter", filter} } }
};

var pipeline = collection.Aggregate().Project(project);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Grup Mongo dan jumlahkan dengan dua bidang

  2. Pemberitahuan:Properti tidak terdefinisi:MongoDB\Driver\Manager::$mydb di [Path] di server wamp

  3. Tidak dapat mengautentikasi ke mongo, autentikasi gagal

  4. Bagaimana saya bisa menggunakan regex di mongodb di atas mongolab?

  5. Mendapatkan satu objek dari mongodb di C #