sql >> Database >  >> NoSQL >> MongoDB

MongoDB:bestaan ​​van een geneste sleutel

Met MongoDb-versie>=3.6 kunt u gebruikmaken van de operator $expr in uw zoekopdracht en gebruik de $objectToArray operator om het dynamische object naar een array te converteren, filter de array voor het werkwaardeveld met $ifNull als de voorwaardelijke operator.

Het volgende voorbeeld demonstreert deze aanpak:

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

Het is geen goede gewoonte om waarden als sleutels te hebben en momenteel (en waarschijnlijk ook in de toekomst) is het niet mogelijk om MongoDB-verzamelingen op te vragen met jokertekens in veldnamen.

Voor een alternatief schemaontwerp dat gemakkelijk op te vragen is, raad ik een schemaherontwerp aan dat dit model volgt:

"_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"
        }
    }
]

}

Die u als volgt kunt opvragen

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

om te controleren op het bestaan ​​van het work veld in de data array.



  1. Hoe krijg je toegang tot een MongoDB-database vanuit twee Openshift-apps?

  2. hoe gegevens van document naar index.phtml in zf2 te tonen?

  3. MongoDB geen ruimte over op apparaat met docker

  4. Hoe test je een methode die verbinding maakt met mongo, zonder daadwerkelijk verbinding te maken met mongo?