我正在构建一个 AngularJS CRUD 站点,以将数据添加到 Parse.com,以供读取数据的移动应用程序使用。 (由于添加的数据量,CRUD 在真实键盘上更容易完成。)第一步是创建并保存子对象(成分和步骤),然后创建并保存一个与成分和步骤。我需要使用关系而不是指针来处理这些。 (因为我将来可能需要多对多)
这是我的问题:编写查询来查找已创建的尚未属于关系一部分的任何成分和步骤,以查找要添加到新配方中的成分和步骤。
Javascript SDK 中的示例未显示此场景,它们仅显示对存在的关系的查询,但相关项目上没有附加属性(帖子没有图像的帖子的评论) )。
Recipe has ingredients, a Relation<Ingredient>, and steps, a Relation<Step>.
这无法获取尚未与配方相关的成分。
var Recipe = Parse.Object.extend("Recipe");
var Ingr = Parse.Object.extend("Ingredient");
recipeQuery= new Parse.Query(Recipe);
recipeQuery.exists("ingredients");
query = new Parse.Query(Ingr);
query.doesNotMatchQuery("recipe",recipeQuery);
query.ascending('name');
query.find({
success: function (data) {
if (data.length > 0) {
$scope.loadingMsg = '';
}
$scope.ingredients = data;
}
});
最佳答案
angular
.module('app.services')
.service('siteService', function($q, ParseService, $timeout) {
var that = this;
this.fetchIngr = function() {
return this.fetchRecipes().then(function(recipes) {
var q = recipes.reduce(function(initial, current) {
initial.push(that.fetchIngredient(current));
return initial;
}, []);
return $q.all(q);
});
};
this.fetchRecipes = function() {
var defer = $q.defer();
var Recipe = Parse.Object.extend("Recipe");
recipeQuery = new Parse.Query(Recipe);
recipeQuery.ascending('name');
recipeQuery.find({
success: function(data) {
console.log('data', data)
defer.resolve(data);
},
error: function(error) {
defer.reject(error);
}
});
return defer.promise;
};
this.fetchIngredient = function(recipe) {
var defer = $q.defer();
recipe.relation('ingredients').query().find({
success: function(res) {
defer.resolve(res);
},
error: function(error) {
defer.reject(error);
}
});
return defer.promise;
};
})
用法:
siteService.fetchIngr().then(function(all){
console.log('flatten all ingr for used recipes',[].concat.apply([], all));
});
在 fetchIngr 函数中,您将收到配方中使用的所有成分的数组。然后你必须比较两个数组之间的差异来找到未使用的成分。要进行减法,您应该获取所有成分并在两个数组之间进行减法(一个用于食谱的成分,另一个包含所有成分)。请参阅此处的帖子:JavaScript array difference
如果您有任何疑问,请随时问我。
关于javascript - 获取 Parse.com 中尚未建立关系的对象列表 Angular javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585677/