MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB Query Help:interroga i valori di qualsiasi chiave in un sottooggetto

Suggerirei una modifica dello schema in modo da poter effettivamente eseguire query ragionevoli in MongoDB.

Da:

{
    "userId": "12347",
    "settings": {
        "SettingA": "blue",
        "SettingB": "blue",
        "SettingC": "green"
    }
}

a:

{
    "userId": "12347",
    "settings": [
        { name: "SettingA", value: "blue" },
        { name: "SettingB", value: "blue" },
        { name: "SettingC", value: "green" }
    ]    
}

Quindi, puoi indicizzare su "settings.value" e fai una query come:

db.settings.ensureIndex({ "settings.value" : 1})

db.settings.find({ "settings.value" : "blue" })

La modifica è davvero semplice... poiché sposta il nome e il valore dell'impostazione in campi completamente indicizzabili e memorizza l'elenco delle impostazioni come un array.

Se non riesci a modificare lo schema, puoi provare la soluzione di @JohnnyHK, ma tieni presente che è sostanzialmente il caso peggiore in termini di prestazioni e non funzionerà efficacemente con gli indici.