MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Query Help - requête sur les valeurs de n'importe quelle clé dans un sous-objet

Je suggérerais un changement de schéma afin que vous puissiez réellement effectuer des requêtes raisonnables dans MongoDB.

De :

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

à :

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

Ensuite, vous pouvez indexer sur "settings.value" , et faites une requête comme :

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

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

Le changement est vraiment simple..., car il déplace le nom et la valeur du paramètre vers des champs entièrement indexables, et stocke la liste des paramètres sous forme de tableau.

Si vous ne pouvez pas modifier le schéma, vous pouvez essayer la solution de @JohnnyHK, mais sachez qu'il s'agit essentiellement du pire des cas en termes de performances et qu'il ne fonctionnera pas efficacement avec les index.