I want to solution for nested queries. Actually, i want to get all reviews for each movie. I have two tables:
Movie:
Review:
It's possible to calculate rating for each movie and set it to avgRating? I don't know why, but i can't get all reviews for one movie.
Parse.Cloud.define("setAvg", function(request, response) {
var Movie = Parse.Object.extend("Movie");
var MovieReview = Parse.Object.extend("MovieReview");
var query = new Parse.Query(Movie);
query.each(function(movie){
var reviewQuery = new Parse.Query(MovieReview);
reviewQuery.equalTo("relatedMovie", movie);
reviewQuery.find({
success: function(reviews){
console.log(reviews);
}
});
}).then(function() {
response.success("Migration completed successfully.");
}, function(error) {
response.error("Uh oh, something went wrong.");
});
});
I getting in logs:
I2015-12-21T17:34:57.777Z][]
I2015-12-21T17:34:57.778Z][{}]
I2015-12-21T17:34:57.779Z][{},{}]
I2015-12-21T17:34:57.780Z][{},{}]
I2015-12-21T17:34:57.781Z][{},{},{}]
I2015-12-21T17:34:57.782Z][{},{}]
The solution was as simple as possible. Thank all for answers.
Parse.Cloud.job("setMovieRating", function(request, response) {
Parse.Cloud.useMasterKey();
var Movie = Parse.Object.extend("Movie");
var MovieReview = Parse.Object.extend("MovieReview");
var query = new Parse.Query(Movie);
query.each(function(movie){
var reviewQuery = new Parse.Query(MovieReview);
reviewQuery.equalTo("relatedMovie", movie);
return reviewQuery.find().then(function(reviews){
var avgRating = 0;
for (var i=0; i<reviews.length;i++){
avgRating+=reviews[i].get('starRating');
}
avgRating = avgRating/reviews.length;
var floatRating = Math.floor(avgRating * 100) / 100;
movie.set('avgRating', parseFloat(floatRating.toFixed(1)));
console.log(movie);
movie.save();
});
}).then(function() {
response.success("Success");
}, function(error) {
response.error("Uh oh, something went wrong.");
});
});