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

Nápověda MongoDB Query - dotaz na hodnoty libovolného klíče v dílčím objektu

Navrhoval bych změnu schématu, abyste mohli skutečně provádět rozumné dotazy v MongoDB.

Od:

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

komu:

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

Pak byste mohli indexovat na "settings.value" a zadejte dotaz jako:

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

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

Změna je opravdu jednoduchá..., protože přesune název nastavení a hodnotu nastavení do plně indexovatelných polí a uloží seznam nastavení jako pole.

Pokud schéma nemůžete změnit, můžete zkusit řešení @JohnnyHK, ale mějte na paměti, že jde v zásadě o nejhorší případ z hlediska výkonu a nebude efektivně fungovat s indexy.



  1. MongoDB $filtr

  2. Jak přejmenujete databázi MongoDB?

  3. Proč se v MongoDB nedoporučuje používat funkce uložené na straně serveru?

  4. MongoDB Object.bsonSize()