How to get the average value from the firebase realtime database











up vote
0
down vote

favorite












My question is about getting the Avg rating from the database, and then updating the average rating every time a row is added.
This is the structure of my database in firebase.
Firebase Real-time Database structure



I am trying to retrieve the Average rating of each ID (number like 299536), and update it every time new data/row is added for the same id.
I am using Firebase Realtime Database.
Any help is appreciated. I am using react.js. Should I create an action for this?










share|improve this question






















  • How are you calculating the avg rating now?
    – SakoBu
    Nov 11 at 23:16










  • I was thinking of trying this way, const oldAvgRating = firebase.database().ref(movieinfo/${movieId}/avgRating); Then get the count of the rows for ID then, Add the current rating to the oldAvg and then divide by the count of rows +1.
    – lokanath
    Nov 11 at 23:18












  • That would give you access to the avg rating - yes...
    – SakoBu
    Nov 11 at 23:28















up vote
0
down vote

favorite












My question is about getting the Avg rating from the database, and then updating the average rating every time a row is added.
This is the structure of my database in firebase.
Firebase Real-time Database structure



I am trying to retrieve the Average rating of each ID (number like 299536), and update it every time new data/row is added for the same id.
I am using Firebase Realtime Database.
Any help is appreciated. I am using react.js. Should I create an action for this?










share|improve this question






















  • How are you calculating the avg rating now?
    – SakoBu
    Nov 11 at 23:16










  • I was thinking of trying this way, const oldAvgRating = firebase.database().ref(movieinfo/${movieId}/avgRating); Then get the count of the rows for ID then, Add the current rating to the oldAvg and then divide by the count of rows +1.
    – lokanath
    Nov 11 at 23:18












  • That would give you access to the avg rating - yes...
    – SakoBu
    Nov 11 at 23:28













up vote
0
down vote

favorite









up vote
0
down vote

favorite











My question is about getting the Avg rating from the database, and then updating the average rating every time a row is added.
This is the structure of my database in firebase.
Firebase Real-time Database structure



I am trying to retrieve the Average rating of each ID (number like 299536), and update it every time new data/row is added for the same id.
I am using Firebase Realtime Database.
Any help is appreciated. I am using react.js. Should I create an action for this?










share|improve this question













My question is about getting the Avg rating from the database, and then updating the average rating every time a row is added.
This is the structure of my database in firebase.
Firebase Real-time Database structure



I am trying to retrieve the Average rating of each ID (number like 299536), and update it every time new data/row is added for the same id.
I am using Firebase Realtime Database.
Any help is appreciated. I am using react.js. Should I create an action for this?







reactjs firebase firebase-realtime-database






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 11 at 23:11









lokanath

5817




5817












  • How are you calculating the avg rating now?
    – SakoBu
    Nov 11 at 23:16










  • I was thinking of trying this way, const oldAvgRating = firebase.database().ref(movieinfo/${movieId}/avgRating); Then get the count of the rows for ID then, Add the current rating to the oldAvg and then divide by the count of rows +1.
    – lokanath
    Nov 11 at 23:18












  • That would give you access to the avg rating - yes...
    – SakoBu
    Nov 11 at 23:28


















  • How are you calculating the avg rating now?
    – SakoBu
    Nov 11 at 23:16










  • I was thinking of trying this way, const oldAvgRating = firebase.database().ref(movieinfo/${movieId}/avgRating); Then get the count of the rows for ID then, Add the current rating to the oldAvg and then divide by the count of rows +1.
    – lokanath
    Nov 11 at 23:18












  • That would give you access to the avg rating - yes...
    – SakoBu
    Nov 11 at 23:28
















How are you calculating the avg rating now?
– SakoBu
Nov 11 at 23:16




How are you calculating the avg rating now?
– SakoBu
Nov 11 at 23:16












I was thinking of trying this way, const oldAvgRating = firebase.database().ref(movieinfo/${movieId}/avgRating); Then get the count of the rows for ID then, Add the current rating to the oldAvg and then divide by the count of rows +1.
– lokanath
Nov 11 at 23:18






I was thinking of trying this way, const oldAvgRating = firebase.database().ref(movieinfo/${movieId}/avgRating); Then get the count of the rows for ID then, Add the current rating to the oldAvg and then divide by the count of rows +1.
– lokanath
Nov 11 at 23:18














That would give you access to the avg rating - yes...
– SakoBu
Nov 11 at 23:28




That would give you access to the avg rating - yes...
– SakoBu
Nov 11 at 23:28












2 Answers
2






active

oldest

votes

















up vote
2
down vote













If I understood your question correctly - something like this:



database.ref(`movieinfo/${movieId}/avgRating`)
.once('value')
.then((snapshot) => {
const val = snapshot.val();
console.log(val);
})
.catch((e) => {
console.log('Error fetching data', e);
});





share|improve this answer




























    up vote
    0
    down vote













    I would recommend abstracting this logic from your client side as you could have other apps and leaving open the avgRating for anyone to update wouldn't make it trust worthy. You can use a Cloud Function trigger for every rating that is created and run your logic there in a trusted environment and recalculate and update your avgRating Heres a page from the docs that explains creating a function



    exports.calculateAvgRating = functions.database.ref('/moveinfo/{moveId}/{rating}')
    .onCreate((snapshot, context) => {
    // LOGIC GOES HERE e.g.
    // Get a list of all your ratings
    // Get average rating
    // Update avgRating
    }





    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254178%2fhow-to-get-the-average-value-from-the-firebase-realtime-database%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes








      up vote
      2
      down vote













      If I understood your question correctly - something like this:



      database.ref(`movieinfo/${movieId}/avgRating`)
      .once('value')
      .then((snapshot) => {
      const val = snapshot.val();
      console.log(val);
      })
      .catch((e) => {
      console.log('Error fetching data', e);
      });





      share|improve this answer

























        up vote
        2
        down vote













        If I understood your question correctly - something like this:



        database.ref(`movieinfo/${movieId}/avgRating`)
        .once('value')
        .then((snapshot) => {
        const val = snapshot.val();
        console.log(val);
        })
        .catch((e) => {
        console.log('Error fetching data', e);
        });





        share|improve this answer























          up vote
          2
          down vote










          up vote
          2
          down vote









          If I understood your question correctly - something like this:



          database.ref(`movieinfo/${movieId}/avgRating`)
          .once('value')
          .then((snapshot) => {
          const val = snapshot.val();
          console.log(val);
          })
          .catch((e) => {
          console.log('Error fetching data', e);
          });





          share|improve this answer












          If I understood your question correctly - something like this:



          database.ref(`movieinfo/${movieId}/avgRating`)
          .once('value')
          .then((snapshot) => {
          const val = snapshot.val();
          console.log(val);
          })
          .catch((e) => {
          console.log('Error fetching data', e);
          });






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 11 at 23:31









          SakoBu

          913317




          913317
























              up vote
              0
              down vote













              I would recommend abstracting this logic from your client side as you could have other apps and leaving open the avgRating for anyone to update wouldn't make it trust worthy. You can use a Cloud Function trigger for every rating that is created and run your logic there in a trusted environment and recalculate and update your avgRating Heres a page from the docs that explains creating a function



              exports.calculateAvgRating = functions.database.ref('/moveinfo/{moveId}/{rating}')
              .onCreate((snapshot, context) => {
              // LOGIC GOES HERE e.g.
              // Get a list of all your ratings
              // Get average rating
              // Update avgRating
              }





              share|improve this answer

























                up vote
                0
                down vote













                I would recommend abstracting this logic from your client side as you could have other apps and leaving open the avgRating for anyone to update wouldn't make it trust worthy. You can use a Cloud Function trigger for every rating that is created and run your logic there in a trusted environment and recalculate and update your avgRating Heres a page from the docs that explains creating a function



                exports.calculateAvgRating = functions.database.ref('/moveinfo/{moveId}/{rating}')
                .onCreate((snapshot, context) => {
                // LOGIC GOES HERE e.g.
                // Get a list of all your ratings
                // Get average rating
                // Update avgRating
                }





                share|improve this answer























                  up vote
                  0
                  down vote










                  up vote
                  0
                  down vote









                  I would recommend abstracting this logic from your client side as you could have other apps and leaving open the avgRating for anyone to update wouldn't make it trust worthy. You can use a Cloud Function trigger for every rating that is created and run your logic there in a trusted environment and recalculate and update your avgRating Heres a page from the docs that explains creating a function



                  exports.calculateAvgRating = functions.database.ref('/moveinfo/{moveId}/{rating}')
                  .onCreate((snapshot, context) => {
                  // LOGIC GOES HERE e.g.
                  // Get a list of all your ratings
                  // Get average rating
                  // Update avgRating
                  }





                  share|improve this answer












                  I would recommend abstracting this logic from your client side as you could have other apps and leaving open the avgRating for anyone to update wouldn't make it trust worthy. You can use a Cloud Function trigger for every rating that is created and run your logic there in a trusted environment and recalculate and update your avgRating Heres a page from the docs that explains creating a function



                  exports.calculateAvgRating = functions.database.ref('/moveinfo/{moveId}/{rating}')
                  .onCreate((snapshot, context) => {
                  // LOGIC GOES HERE e.g.
                  // Get a list of all your ratings
                  // Get average rating
                  // Update avgRating
                  }






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 12 at 11:55









                  Jack Woodward

                  62139




                  62139






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254178%2fhow-to-get-the-average-value-from-the-firebase-realtime-database%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Florida Star v. B. J. F.

                      Danny Elfman

                      Lugert, Oklahoma