2017-10-06 4 views
0

J'ai ma demande ayant un réseau de contacts que je dois amende si le contact se trouve dans la base de données:Trouvez et économisez l'intérieur pour boucle dans MongoDB

{ 
    "vishReqHeader": { 
     "ClientId": "0", 
     "AppId": "101", 
     "ApiCode": "1007", 
     "ReqNo": "123456789" 
    }, 
    "vishReqBody": { 
     "RegPhNo": "9880889660", 
     "Cnt": "3", 
     "Contacts": [{ 
       "PhNo": "9880889660", 
       "Name": "Alex" 
      }, 
      { 
       "PhNo": "9538607847", 
       "Name": "Cindy" 
      }, 
      { 
       "PhNo": "9886949651", 
       "Name": "Rob" 
      } 
     ] 

    }, 
    "vishReqTrailer": { 
     "DeviceData": "lat=12.9677992|lng=77.596204|IMEI=1234567890|appVer=3.0.1|OS=ANDROID|SoftVer=6.0.1", 
     "Authentication": "securitytoken" 
    } 
} 

Si présent chercher les détails et enregistrer les détails en ajoutant les détails récupérés.
Sinon il suffit d'ajouter le contact dans la base de données, mais la requête ne fonctionne pas comme prévu

router.route('/uploadContacts') 
    .post(function(req,res){ 
     var j; 
     for(j = 0; j < req.body.vishReqBody.Contacts.length; j++) { 
      ProfileDetails.findOne({ 'PhNo' : req.body.vishReqBody.Contacts[j].PhNo} , 
       function(err, profileDetail) { 
        console.log("*************reqreq********************") 

        console.log(j) 
       if(profileDetail && profileDetail.PhNo){ 

        console.log(req.body.vishReqBody.Contacts) 

        console.log("*************reqreq********************") 
        var contactsDetails = new contacts(); 
        contactsDetails.PhNo=req.body.vishReqBody.Contacts[j].PhNo 
        contactsDetails.RegStatus=profileDetail.Reg_Status 
        contactsDetails.profileId=profileDetail.Profile_Id 
        contactsDetails.PhoneBookName=req.body.vishReqBody.Contacts[j].Name 
        contactsDetails.updatedByProfileId=req.body.vishReqHeader.AppId 

        contactsDetails.save(function(err,result){ 

        }) 
       } 

       }); 

     } 
}) 

ici dans le code

Si je ne trouve affiche les détails FIND correctement, lorsque je tente pour enregistrer la valeur jeme dans la boucle est toujours 3

Pas sûr de l'appel async qui passe par

s'il vous plaît me aider à corriger le quire, à chaque élément du tableau de contacts doit faire fi e et enregistrer comment je le fais

Répondre

1

Pas besoin de tirer une requête pour chaque numéro de téléphone

d'abord obtenir tous les numéros de téléphone dans un tableau.

var phoneNumberArray =req.vishReqBody.Contacts.map(function(contact){ 
    return contact.PhNo 
}) 

Ensuite, utilisez le code suivant:

ProfileDetails.findOne({ 'PhNo' : {$in:phoneNumberArray}}) 

Pour obtenir le nom du contact correspondant de votre demande,

req.vishReqBody.Contacts.find(function(contact){ 
    return contact.PhNo == profileDetail.PhNo 
}) 
+0

hoo oui qui fonctionne, mais comment puis-je obtenir la valeur contactsDetails.PhNo = req.body.vishReqBody.Contacts [j] .PhNo contactsDetails.PhoneBookName = req.body.vishReqBody.Contacts [j] .name qui font partie de la matrice de demande de incomming – DhanaLaxshmi

+0

de commande vers le haut réponse datée. la dernière instruction retournera l'objet de contact de la demande –

+0

pouvez-vous dire s'il vous plaît quel est ce matchedContacter – DhanaLaxshmi