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

Apakah ada cara untuk memproyeksikan jenis bidang

Ada beberapa masalah yang membuat ini tidak praktis:

  1. Karena kueri merupakan parameter khusus dari kemampuan melakukan proyeksi, hal ini tidak mungkin dilakukan hanya dari satu kueri, karena proyeksi tidak dapat dipengaruhi oleh hasil kueri
  2. Karena tidak ada cara dengan kerangka kerja agregasi untuk mengulangi bidang dan memeriksa jenis, itu juga bukan pilihan

Meskipun demikian, ada cara yang agak aneh dalam menggunakan Map-Reduce yang mendapatkan jawaban serupa, meskipun dalam output gaya Map-Reduce yang tidak mengagumkan:

map = function() {
    function isNumber(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    }

    var numerics = [];
    for(var fn in this) {
        if (isNumber(this[fn])) {
            numerics.push({f: fn, v: this[fn]});
        }
        if (Array.isArray(this[fn])) {
            // example ... more complex logic needed
            if(isNumber(this[fn][0])) {
                numerics.push({f: fn, v: this[fn]});
            }
        }
    }
    emit(this._id, { n: numerics });
};

reduce = function(key, values) {
  return values;  
};

Belum lengkap, tapi hasilnya sesuai dengan yang diinginkan:

"_id" : ObjectId("52fac254f40ff600c10e56d4"),
 "value" : {
         "n" : [
                 {
                         "f" : "list",
                         "v" : [
                                 1,
                                 2,
                                 3,
                                 4,
                                 5
                         ]
                 },
                 {
                         "f" : "views",
                         "v" : 5
                 }
         ]
 }

Peta hanya melihat setiap properti dan memutuskan apakah itu terlihat seperti angka ... dan jika demikian, menambahkan ke array yang akan disimpan sebagai objek sehingga mesin pengurang peta tidak akan tersedak pada output array. Saya telah membuatnya tetap sederhana dalam kode contoh -- Anda pasti dapat meningkatkan logika pemeriksaan numerik dan array. :)

Tentu saja, ini tidak hidup seperti find atau agregasi, tetapi karena MongoDB tidak dirancang dengan mempertimbangkan hal ini, ini mungkin harus dilakukan jika Anda benar-benar menginginkan fungsi ini.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Data pegas dan mongoDB - pewarisan dan @DBRef

  2. Bagaimana cara mendapatkan objek Node saat menggunakan Neo4j jdbc?

  3. Agregasi Mongo / Mongoose - masalah $redact dan $cond

  4. Azure CosmosDB menggunakan Driver Mongo:Dapatkan Hitungan Tanpa mendapatkan semua dokumen berdasarkan elemen dalam sub dokumen di C#.Net

  5. Meteor:Kode keluar mongo tak terduga 100. Mulai ulang. Tidak dapat memulai server mongo