0

i am trying to loop through a nested object and save the data to my cloud firestore database but it is not working,

this is the structure of the object i have retrieved from an API call,

{
    "count": 133,
    "filters": {
        "dateFrom": "2021-04-12",
        "dateTo": "2021-04-22",
        "permission": "TIER_ONE"
    },
    "matches": [
        {
            "id": 304061,
            "competition": {
                "id": 2021,
                "name": "Premier League",
                "area": {
                    "name": "England",
                    "code": "ENG",
                    "ensignUrl": "https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg"
                }
            },
            "season": {
                "id": 619,
                "startDate": "2020-09-12",
                "endDate": "2021-05-23",
                "currentMatchday": 31,
                "winner": null
            },
            "utcDate": "2021-04-12T17:00:00Z",
            "status": "SCHEDULED",
            "matchday": 31,
            "stage": "REGULAR_SEASON",
            "group": "Regular Season",
            "lastUpdated": "2021-04-12T16:51:35Z",
            "odds": {
                "homeWin": 3.43,
                "draw": 3.31,
                "awayWin": 2.15
            },
            "score": {
                "winner": null,
                "duration": "REGULAR",
                "fullTime": {
                    "homeTeam": null,
                    "awayTeam": null
                },
                "halfTime": {
                    "homeTeam": null,
                    "awayTeam": null
                },
                "extraTime": {
                    "homeTeam": null,
                    "awayTeam": null
                },
                "penalties": {
                    "homeTeam": null,
                    "awayTeam": null
                }
            },
            "homeTeam": {
                "id": 74,
                "name": "West Bromwich Albion FC"
            },
            "awayTeam": {
                "id": 340,
                "name": "Southampton FC"
            },
            "referees": [
                {
                    "id": 11430,
                    "name": "Simon Hooper",
                    "role": "MAIN_REFEREE",
                    "nationality": "England"
                },
                {
                    "id": 11570,
                    "name": "Harry Lennard",
                    "role": "ASSISTANT_N1",
                    "nationality": "England"
                },
                {
                    "id": 11505,
                    "name": "Derek Eaton",
                    "role": "ASSISTANT_N2",
                    "nationality": "England"
                },
                {
                    "id": 11585,
                    "name": "Craig Pawson",
                    "role": "FOURTH_OFFICIAL",
                    "nationality": "England"
                },
                {
                    "id": 11487,
                    "name": "Kevin Friend",
                    "role": "VIDEO_ASSISTANT_REFEREE",
                    "nationality": "England"
                }
            ]
        },
        {
            "id": 303253,
            "competition": {
                "id": 2002,
                "name": "Bundesliga",
                "area": {
                    "name": "Germany",
                    "code": "DEU",
                    "ensignUrl": "https://upload.wikimedia.org/wikipedia/commons/b/ba/Flag_of_Germany.svg"
                }
            },
            "season": {
                "id": 599,
                "startDate": "2020-09-18",
                "endDate": "2021-05-15",
                "currentMatchday": 28,
                "winner": null
            },
            "utcDate": "2021-04-12T18:30:00Z",
            "status": "SCHEDULED",
            "matchday": 28,
            "stage": "REGULAR_SEASON",
            "group": "Regular Season",
            "lastUpdated": "2021-04-12T14:42:35Z",
            "odds": {
                "homeWin": 2.8,
                "draw": 3.72,
                "awayWin": 2.36
            },
            "score": {
                "winner": null,
                "duration": "REGULAR",
                "fullTime": {
                    "homeTeam": null,
                    "awayTeam": null
                },
                "halfTime": {
                    "homeTeam": null,
                    "awayTeam": null
                },
                "extraTime": {
                    "homeTeam": null,
                    "awayTeam": null
                },
                "penalties": {
                    "homeTeam": null,
                    "awayTeam": null
                }
            },
            "homeTeam": {
                "id": 2,
                "name": "TSG 1899 Hoffenheim"
            },
            "awayTeam": {
                "id": 3,
                "name": "Bayer 04 Leverkusen"
            },
            "referees": []
        }]}

this is my attempt to loop through the matches section of my object, i want to be able to iterate through each match while still being able to access sub objects within each iteration and set data in my cloud firestore database

   axios.request(options).then(function(response) {



    //console.log(typeof response); // check the type of response returning already in JSON format
    //console.log(response); // check the response object and based on key/values process it 

    const data = response.data; // if resp contains the data you will get it here.


    //console.log(response.data);

    /* for (let data1 in data.pagination) {
       // from the sample response you shared in the question 
       console.log(data1) // prints the keys
       console.log(data.pagination.data1) // prints the values*/

    for (i = 0; i < data.count; i++) {

        // from the sample response you shared in the question 
        // console.log(index);
        // console.log(data.f[data1]) // prints the keys
        // //console.log(data.pagination.data1) // prints the values

        const soccerData = {
            name: `${data.matches[i].competition.name}`,
            id: `${data.matches[i].competition.id}`
        };
        return db.collection('matches').doc(`${data.matches[i].id}`)
            .set(soccerData).then(() =>
                console.log('data written to database'));




    }


}).catch(function(error) {
    console.error(error);
});
 

1 Answer 1

1

To loop over matches use:

response.data.matches.forEach(match => {
  // do something with the match
  }
)

Instead of the for loop. You can then do

const soccerData = {
   name: `${match.competition.name}`,
   id: `${match.competition.id}`
}

and also:

return db.collection('matches').doc(`${match.id}`)
        .set(soccerData).then(() =>
            console.log('data written to database'));

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.