MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Ajuda de consulta do MongoDB - consulta valores de qualquer chave em um subobjeto


Eu sugiro uma mudança de esquema para que você possa realmente fazer consultas razoáveis ​​no MongoDB.

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

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

Então, você pode indexar em "settings.value" , e faça uma consulta como:
db.settings.ensureIndex({ "settings.value" : 1})

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

A mudança é realmente simples..., pois move o nome da configuração e o valor da configuração para campos totalmente indexáveis ​​e armazena a lista de configurações como uma matriz.

Se você não puder alterar o esquema, tente a solução do @JohnnyHK, mas esteja avisado de que é basicamente o pior caso em termos de desempenho e não funcionará efetivamente com índices.