Frage

Nehmen wir an, ich habe folgende Dokumente in meiner Sammlung:

{
   "Tag-1": "val-1",
   "Tag-2":
      {
        "S_Tag-1": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"},
        "S_Tag-2": {"SS_Tag_1":"SS_Tag_Val_3","SS_Tag_2":"SS_Tag_Val_3"},
        "S_Tag-3": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"},
      }
}

Jetzt möchte ich alle Kinder von bekommen S_Tag wessen Kind einen Wert hat "SS_Tag_Val_1"

Erwartete Ausgabe wäre:

"S_Tag-1": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"}
"S_Tag-3": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"}

Wie erreicht man das in MongoDB?

Danke im Voraus!

War es hilfreich?

Lösung

Die Dokumentenstruktur könnte besser sein, um Ihnen andere Optionen zu geben.Aber Sie werden JavaScript-Verarbeitung benötigen, um dies zu filtern und anzupassen, so dass der beste Ansatz MapReduce ist:

db.collection.mapReduce(
    function () {

        var obj = {};
        var count = 0;

        for ( var t in this["Tag-2"] ) {

            for ( var k in this["Tag-2"][t] ) {
                if ( this["Tag-2"][t][k] === "SS_Tag_Val_1" ) {
                    obj[t] = this["Tag-2"][t];
                    count++;
                    break;
                }
            }

        }

        if ( count != 0 )
            emit( this._id, obj );

    },
    function(){},
    { "out": { "inline": 1 } }
)

Gibt dir:

    "results" : [
            {
                    "_id" : ObjectId("538ea58506bfa12156d3041a"),
                    "value" : {
                            "S_Tag-1" : {
                                    "SS_Tag_1" : "SS_Tag_Val_1",
                                    "SS_Tag_2" : "SS_Tag_Val_2"
                            },
                            "S_Tag-3" : {
                                    "SS_Tag_1" : "SS_Tag_Val_1",
                                    "SS_Tag_2" : "SS_Tag_Val_2"
                            }
                    }
            }
    ]

Sie benötigen also eine Variante davon für Ihren tatsächlichen Fall, in dem Sie die Objektstruktur durchlaufen können, die Sie haben.Aufgrund der festgelegten Pfade nicht das Beste zum Abfragen.Erwägen Sie die Verwendung von Arrays, um Abfragen zu vereinfachen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top