MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Abfragehilfe – Abfrage von Werten eines beliebigen Schlüssels in einem Unterobjekt

Ich würde eine Schemaänderung vorschlagen, damit Sie tatsächlich vernünftige Abfragen in MongoDB durchführen können.

Von:

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

zu:

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

Dann könnten Sie auf "settings.value" indexieren , und machen Sie eine Abfrage wie:

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

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

Die Änderung ist wirklich einfach ..., da sie den Einstellungsnamen und den Einstellungswert in vollständig indexierbare Felder verschiebt und die Liste der Einstellungen als Array speichert.

Wenn Sie das Schema nicht ändern können, können Sie die Lösung von @JohnnyHK ausprobieren, aber seien Sie gewarnt, dass dies in Bezug auf die Leistung im Grunde der schlimmste Fall ist und mit Indizes nicht effektiv funktioniert.