sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Existence vnořeného klíče

S verzí MongoDb>=3.6 můžete využít operátora $expr ve svém dotazu a použijte $objectToArray operátor pro převod dynamického objektu na pole filtrujte pole pro pole pracovní hodnoty pomocí $ifNull jako podmíněný operátor.

Následující příklad ukazuje tento přístup:

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

Není dobrým zvykem mít hodnoty jako klíče a v současnosti (a pravděpodobně i v budoucnu) není možné dotazovat se na kolekce MongoDB pomocí zástupných znaků v názvech polí.

Pro alternativní návrh schématu, který lze snadno dotazovat, bych navrhl redesign schématu, který bude následovat tento model:

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

}

Na které se můžete zeptat následovně

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

zkontrolovat existenci work pole v data pole.



  1. Hledání Mongoose / mongoDb, kde potřebuji hodnoty nenaplněné vlastnosti

  2. Hybridní cloud vs. Úplný veřejný cloud – klady a zápory

  3. Metoda Mongoose findOne načte platný dokument s chybějícím _id

  4. Existuje způsob, jak ukládat objekty pythonu přímo v mongoDB bez jejich serializace