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.
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
add a comment |
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.
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
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
add a comment |
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.
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
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.
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
reactjs firebase firebase-realtime-database
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
add a comment |
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
add a comment |
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);
});
add a comment |
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
}
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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);
});
add a comment |
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);
});
add a comment |
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);
});
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);
});
answered Nov 11 at 23:31
SakoBu
913317
913317
add a comment |
add a comment |
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
}
add a comment |
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
}
add a comment |
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
}
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
}
answered Nov 12 at 11:55
Jack Woodward
62139
62139
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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