Hai bisogno di aiuto per scrivere query mongodb
-
21-12-2019 - |
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!
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