2017-10-03 2 views
0

J'essaie de combiner le résultat de deux appels de fonctions et de renvoyer un objet json comme sortie de mon appel api.Comment combiner la sortie de MongoDB find query?

fonction getListeUtilisateurs retente la liste des utilisateurs enregistrés et la fonction averageUserAge retourne l'âge moyen des personnes appartenant à un groupe d'âge particulier

En fonction de fusion que je veux combiner la sortie des deux et retourner un objet JSON. Est-ce que quelqu'un peut expliquer comment puis-je y parvenir?

Veuillez noter que je ne recherche pas la fonction agrégat car elle ne produit pas la sortie attendue dans mon analyse de rentabilisation. Ci-dessous l'exemple de code écrit pour démontrer ce que je recherche car mon analyse de rentabilité est trop complexe.

function getUserList(req,res){ 

userModel.findOne({ageGroup : 'some group'},{name : 1,email : 1, credits : 1},{}, function(err, result) { 
    if(err || !result) { 
     console.log("No user found"); 
    } else { 
     return result 
    }; 
}); 

} 

function averageUserAge(req,res) { 

ageModel.findOne({ageGroup : 'some group'},{email : 1, credits : 1},{}, 
function(err, result) { 
    if(err || !docs) { 
     console.log("No users with a particular age group found"); 
    } else { 
     return result 
    }; 
}); 

} 
//Merge the output of two function calls 
function merge(req,res){ 

    var result1=getUserList(req,res) 
    var result2=averageUserAge(req,res) 

    var mergedResult=//How to merge result1 & result2 

    return res.json(mergedResult) 

} 
+0

Copie possible de [combiner ou fusionner un objet json] (https://stackoverflow.com/questions/14974864/combine-or-merge-json-on-node-js-without-jquery) –

+0

Référer cette réponse https: //stackoverflow.com/a/45728310/7635845 en fait cette réponse est liée à mysqldb et à la place de requêtes mysql garder mongodb requêtes et vérifier .Ce code fonctionne pour moi, j'espère que cela vous aide aussi mongodb .. –

Répondre

0

Vous pouvez essayer quelque chose comme ceci:

function merge(req, res) { 
    const result1 = getUserList(req,res); 
    const result2 = averageUserAge(req,res); 

    return Promise.all([result1, result2]).then(() => { 
     return res.send({res1: result1, res2: result2}); 
    }).catch(e => res.status(400).send(e)); 
}; 

Promise.all fait en sorte que result1 et result2 sont revenus respectivement leurs valeurs. Ensuite, vous renvoyez une réponse contenant un objet JSON incluant vos résultats res1 et res2.

1

vous pouvez utiliser cette bibliothèque impressionnante async Ou vous pouvez utiliser callbacks