Javascript Parse.com嵌套查询
我想找到嵌套查询的解决方案。 实际上,我想得到每部电影的所有评论。 我有两张桌子: 电影: 审查: 可以计算每部电影的分级并将其设置为avgRating吗? 我不知道为什么,但我不能得到一部电影的所有评论Javascript Parse.com嵌套查询,javascript,parse-platform,Javascript,Parse Platform,我想找到嵌套查询的解决方案。 实际上,我想得到每部电影的所有评论。 我有两张桌子: 电影: 审查: 可以计算每部电影的分级并将其设置为avgRating吗? 我不知道为什么,但我不能得到一部电影的所有评论 Parse.Cloud.define("setAvg", function(request, response) { var Movie = Parse.Object.extend("Movie"); var MovieReview = Parse.Object.ex
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.");
});
});
我正在登录日志:
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][{},{}]
我可以看到几个潜在的问题:
- 你应该使用后台作业而不是函数来确保你有足够的时间
- 您应该在每个块内定义reviewQuery以避免混合
- 如果一部电影的收视率可以超过100,则应将查询限制设置为1000(这是最大限制-如果可能超过1000,则必须在递增skip参数的同时多次进行相同的查询)
- 解决方案尽可能简单。
谢谢大家的回答
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.");
});
});
Parse.Cloud.job(“setMovieRating”),函数(请求、响应){
Parse.Cloud.useMasterKey();
var Movie=Parse.Object.extend(“Movie”);
var MovieReview=Parse.Object.extend(“MovieReview”);
var query=newparse.query(电影);
query.each(函数(电影){
var reviewQuery=newparse.Query(MovieReview);
reviewQuery.equalTo(“relatedMovie”,movie);
返回reviewQuery.find().then(函数(reviews){
var=0;
对于(var i=0;我不会忘记return
在reviewQuery.find()之前)
可能重复的除了问题中列出的选项外,还有在插入/更新/删除评级时使用云代码更新单独表格的选项。我已经看到了这个答案。但首先,我需要获得每部电影的所有评论。感谢您的回答,但它不起作用。每个评论都没有关系o Movie。是否要获取所有电影,然后计算平均值?我有一个包含电影评论的表。电影可能包含3个评论。我需要从3个评论中计算每部电影的平均值。Thanx作为您的答案。1)我只在测试中使用该函数。2)我已经修复了它3)最大值-为3级当某些评论缺失时,是否有相同电影的其他评论不缺失?抱歉,我不完全理解您的意思。每部电影包含3个评论。数据由脚本填充。脚本在插入之前检查所有数据。每个评论包含评等和与电影相关的字段。
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.");
});
});