Dire che ho questo:chiavi dinamiche di valori in MongoDB
{
"_id" : "ENVD",
"years" : [
{
"year" : "2013",
"avgInstructor" : 5.144999999999998
},
{
"year" : "2012",
"avgInstructor" : 5.194436090225564
}
]
}
ho bisogno di essere in grado di trovare la differenza nel campo avgInstructor 2012-13. Stavo pensando che potrei trasformare i tasti in qualche modo usando uno $project
che renderebbe l'anno la chiave e il valore di avgInstructor. Quindi sarebbe simile a questo:
{
"_id" : "ENVD",
"years" : {
"2013" : 5.144999999999998,
"2012" : 5.194436090225564
}
}
È possibile? Tieni presente che il mio obiettivo principale è quello di essere in grado di eseguire una sottrazione come questo pseudocodice: years['2013'].avgInstructor - years['2013'].avgInstructor
. Quindi se vedi un modo più semplice, sarebbe grandioso. Non sono sicuro del modo migliore per farlo nel contesto di una pipeline di aggregazione. Qualcuno può aiutare?
Non smette mai di stupirmi perché qualcuno potrebbe pensare che questa sia una buona cosa rispetto a come è già memorizzata. Inoltre, indipendentemente da ciò che si vuole fare qui, è probabile che sarà più efficiente nel codice se non si sta effettivamente aggregando nulla tra i documenti. –
Hai visto il mio commento sull'offrire una soluzione migliore se ne vedi una? Il tuo commento non aiuta molto. Alcune note: 1) Questo è un piccolo set di dati, quindi le prestazioni non sono della massima priorità. 2) Mi è stato chiesto di completare questo utilizzando * solo * una query Mongo. È per lo più un'esperienza di apprendimento, e preferirei molto di più codificarlo (è un problema relativamente semplice, quindi). – ianks
Beh, penso che lo faccia e almeno una persona è d'accordo. Sembra che la soluzione migliore sia lasciarla così com'è. Cosa c'è di sbagliato con appena sottrarre: 'years [0] .avgInstructor - years [1] .avgInstructor' o con' indexOf ("2013)' dopo un 'map()' per il valore del campo per ottenere l'indice dell'elemento o qualsiasi altra lingua Notazioni equivoche non si aggregano i documenti, quindi sembra un lavoro non necessario. –