Domanda

Diciamo che ho i seguenti documenti nella mia collezione:

{
   "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"},
      }
}
.

Ora voglio ottenere tutti i figli di S_Tag il cui bambino ha valore "SS_Tag_Val_1"

L'uscita prevista sarebbe:

"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"}
.

Come raggiungere questo in MongoDB?

Grazie in anticipo!

È stato utile?

Soluzione

La struttura del documento potrebbe essere migliore per darti altre opzioni.Ma avrai bisogno di un'elaborazione JavaScript per filtrare e abbinare questo così il miglior approccio è MapReduce:

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 } }
)
.

ti dà:

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

Quindi hai bisogno di una variante di quella per il tuo caso reale in cui è possibile attraversare la struttura dell'oggetto che hai.Non la cosa migliore da interrogare a causa dei percorsi stabiliti.Considerare l'utilizzo di array per rendere più facile le query.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top