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

MongoDB:Keberadaan kunci bersarang

Dengan versi MongoDb>=3.6 Anda dapat memanfaatkan operator $expr dalam kueri Anda dan gunakan $objectToArray operator untuk mengonversi objek dinamis menjadi larik, filter larik untuk bidang nilai kerja menggunakan $ifNull sebagai operator bersyarat.

Contoh berikut menunjukkan pendekatan ini:

db.collection.find({
    $expr: {
        $gt: [
            {
                $size: {
                    $filter: {
                        input: { $objectToArray: '$$ROOT' },
                        cond: { 
                            $ifNull: ['$$this.v.work', false]
                        }
                    }
                }
            },
            0
        ]
    }
})

Memiliki nilai sebagai kunci bukanlah praktik yang baik dan saat ini (dan mungkin juga di masa mendatang) tidak mungkin menanyakan koleksi MongoDB dengan karakter pengganti di nama bidang.

Untuk desain skema alternatif yang mudah ditanyakan, saya akan menyarankan desain ulang skema yang mengikuti model ini:

"_id" : ObjectId("55128d6315f3df650f2038cf"),
"customer_name" : "test user",
"createad" : "2011-04-14 16:44:09",
"data" : [ 
    {
        "key" : "123456",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }, 
    {
        "key" : "321456",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }, 
    {
        "key" : "789654",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }
]

}

Yang dapat Anda tanyakan sebagai berikut

db.collection.find({ "data.work" : { $exists : true, $ne : null } })

untuk memeriksa keberadaan work bidang di data larik.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. lacak dokumen yang dihapus dalam koleksi terbatas Mongo DB

  2. pengurangan dalam kueri mongo tidak berfungsi?

  3. Lupa jalur data mongodb

  4. Pengurutan MongoDB sangat lambat bahkan pada bidang yang diindeks

  5. Kesalahan Aplikasi setelah menerapkan aplikasi Meteor 1.0 di heroku