यहां मैं बाहरी एपीआई से JSON प्रतिक्रिया प्राप्त करने के लिए Nodejs एप्लिकेशन का उपयोग कर रहा हूं। मुझे इस प्रतिक्रिया की कुछ कुंजी-मूल्य जोड़ी को कैप्चर करने की आवश्यकता है और इसे MongoDB को सहेजने की आवश्यकता है। मुझे प्रतिक्रिया ठीक से मिल रही है, लेकिन मैं डेटाबेस में डेटा को सहेजने में असमर्थ हूं।

आवश्यकता:

हर बार जब मुझे बाहरी सर्वर से यह प्रतिक्रिया मिलती है, तो मुझे इस संग्रह में पहले से मौजूद होने पर किसी भी दस्तावेज़ को फिर से लिखकर तालिका में सहेजने की आवश्यकता होती है। यहां मेरे पास जेसन प्रतिक्रिया में लगभग 7 सरणी आइटम हैं, मुझे स्वचालित रूप से सभी वस्तुओं से संबंधित कुंजी मान जोड़ी को सहेजने की आवश्यकता है।

आदर्श:

    var mongoose = require('mongoose');
    const getAllUsersDataSchema = new mongoose.Schema({
        userRefID:[] ,
        userName:[],
        divisionId: [{}],
        divisionName:[{}],
        emailId :[{}],
    })
    module.exports = getAllUsers = mongoose.model('getAllUsers',getAllUsersDataSchema );

**API Call where i am capturing external  API response:**

const express = require('express');
const router = express.Router();
const request = require('request');
const config = require('../config');
const fs = require('fs'); 
const getAllUsers = require ('../db/getAllUsersListmodel');
var mongoose = require('mongoose');
mongoose.connect ('mongodb://localhost/testdb',{ useUnifiedTopology: true , useNewUrlParser: true });

router.get('/', (req, res) => {
    // token in session -> get user data and send it back to the Angular app
   
    var data =fs.readFileSync('../teamlist.txt',  {encoding:'utf8'} )
    console.log(data);

    if (data) {
      request(
        {
          method: 'GET',
         
          url: 'https://api.mypurecloud.com/api/v2/users',

          headers: {
            'Authorization': 'Bearer ' + data
          }
        },
  
        // callback
        (error, response, body) => {

          let userInfoResponse = JSON.parse(body);
          res.send(userInfoResponse);
          console.log(userInfoResponse.entities.length)
          console.log(userInfoResponse.entities[0].division.id)

          getAllUsers.create({
            userRefID : userInfoResponse.entities.id,
            userName: userInfoResponse.entities.name,
            divisionId: userInfoResponse.entities.division.id,
            divisionName:userInfoResponse.entities.division.name,
           emailId:userInfoResponse.entities.primaryContactInfo.address      
        }, (error,post)=>{
            console.log(error,post);
        });
}
          );
        }

// no token -> send nothing
    else {
      res.send("Token Not Present - Kindly login in back");
    }

    //console.log(req.session.token);
       
  });

डेटा डीबी में सहेज रहा है लेकिन इसमें कोई सरणी डेटा सहेजा नहीं जा रहा है।

{
        "_id" : ObjectId("5fd998d61439a434983702cd"),
        "userRefID" : [ ],
        "userName" : [ ],
        "__v" : 0
}

यह सटीक एपीआई JSON प्रतिक्रिया है मैं इसे डीबी में सहेजने और भविष्य के संदर्भों के लिए इसका उपयोग करने की कोशिश कर रहा हूं:

{
  "entities": [
    {
      "id": "07f426ff-506f-4e5e-afdb-2c7397edac61",
      "name": "EPS Purecloud Support",
      "division": {
        "id": "36852a81-ad7f-4c71-a1cd-7f431c05179f",
        "name": "",
        "selfUri": "/api/v2/authorization/divisions/36852a81-ad7f-4c71-a1cd-7f431c05179f"
      },
      "chat": {
        "jabberId": "5dcc25e1db8c7e19238a287d@cognizant3.orgspan.com"
      },
      "email": "eps@genesys.com",
      "primaryContactInfo": [
        {
          "address": "eps@genesys.com",
          "mediaType": "EMAIL",
          "type": "PRIMARY"
        }
      ],
      "addresses": [],
      "state": "active",
      "username": "eps@genesys.com",
      "version": 3,
      "acdAutoAnswer": false,
      "selfUri": "/api/v2/users/07f426ff-506f-4e5e-afdb-2c7397edac61"
    },
    {
      "id": "c5ce06dc-6265-4d16-be18-f5fc5a918295",
      "name": "Generic",
      "division": {
        "id": "36852a81-ad7f-4c71-a1cd-7f431c05179f",
        "name": "",
        "selfUri": "/api/v2/authorization/divisions/36852a81-ad7f-4c71-a1cd-7f431c05179f"
      },
      "chat": {
        "jabberId": "5ebab3dba6686314f6913b98@cognizant3.orgspan.com"
      },
      "email": "integration-generic-a03293c0-945d-11ea-a64c-ebeb45b9d295@webhook.com",
      "primaryContactInfo": [
        {
          "address": "integration-generic-a03293c0-945d-11ea-a64c-ebeb45b9d295@webhook.com",
          "mediaType": "EMAIL",
          "type": "PRIMARY"
        }
      ],
      "addresses": [],
      "state": "active",
      "username": "integration-generic-a03293c0-945d-11ea-a64c-ebeb45b9d295@webhook.com",
      "version": 2,
      "acdAutoAnswer": false,
      "selfUri": "/api/v2/users/c5ce06dc-6265-4d16-be18-f5fc5a918295"
    },
  {
   /**  3rd User *********/
  }
{
   /**  4th User *********/
  }

],
  "pageSize": 25,
  "pageNumber": 1,
  "total": 7,
  "firstUri": "/api/v2/users?pageSize=25&pageNumber=1",
  "selfUri": "/api/v2/users?pageSize=25&pageNumber=1",
  "lastUri": "/api/v2/users?pageSize=25&pageNumber=1",
  "pageCount": 1
}
0
hari 16 पद 2020, 09:17

1 उत्तर

सबसे बढ़िया उत्तर

इकाइयाँ वस्तुओं की एक सरणी है, लेकिन आप इसके गुणों को एक वस्तु के रूप में संदर्भित करने का प्रयास कर रहे हैं:

userRefID : userInfoResponse.entities.id, // but "entities": [ {"id":"...", "name":"..."} ],
userName: userInfoResponse.entities.name,

आपको डेटा को लूप में एकत्र करना होगा, और उसके बाद ही उसे डेटाबेस में सम्मिलित करना होगा:

const usersArray = userInfoResponse.entities.map(el => ({
  userRefID : el.id,
  userName: el.name,
  divisionId: el.division.id,
  divisionName: el.division.name,
  emailId: el.primaryContactInfo[0].address
}));

getAllUsers.insertMany(usersArray)
0
Yuri Vorobev 16 पद 2020, 09:44
बहुत बहुत धन्यवाद यूरी। मुझे इससे जुड़ी कुछ और चिंताएं हैं। ए। जब ​​भी मुझे प्रतिक्रिया मिली, मुझे इस नए डेटा के साथ पहले से मौजूद संग्रह के अंदर पुराने डेटा को फिर से लिखना होगा। ख. क्या मेरे पास डेटाबेस के अंदर इस डेटा को सरणी के अंतर्गत रखने का विकल्प है। "36852a81-ad7f-4c71-a1cd-7f431c05179f", "emailId" :"testuser@cognizant.com" }, { दूसरा डेटा } ]
 – 
hari
16 पद 2020, 10:49
यदि आपको डेटा को अधिलेखित करने की आवश्यकता है, तो पहले सभी पुराने डेटा को हटा दें: प्रतीक्षा करें getAllUsers .deleteMany ();
 – 
Yuri Vorobev
16 पद 2020, 11:13
लगभग दूसरा प्रश्न: $push के साथ .update() का उपयोग करें: docs.mongodb। कॉम/मैनुअल/संदर्भ/ऑपरेटर/अपडेट/पुश
 – 
Yuri Vorobev
16 पद 2020, 11:17