sql >> Base de Datos >  >> NoSQL >> MongoDB

Ayuda de consulta de MongoDB:consulta sobre los valores de cualquier clave en un subobjeto

Sugeriría un cambio de esquema para que pueda realizar consultas razonables en MongoDB.

De:

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

Luego, podría indexar en "settings.value" y haz una consulta como:

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

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

El cambio es realmente simple..., ya que mueve el nombre de configuración y el valor de configuración a campos totalmente indexables, y almacena la lista de configuraciones como una matriz.

Si no puede cambiar el esquema, puede probar la solución de @JohnnyHK, pero tenga en cuenta que básicamente es el peor de los casos en términos de rendimiento y no funcionará de manera efectiva con los índices.