我有三个相关类的设置:_User,Article和Profile。在TestFragment
中,Article
有一个名为author
的指针,而在_User
,我有相同的指针; Profile
的指针,但名为user
。
现在,我想从_User
中检索数据Article
和firstname
中的lastname
Profile
,其中Article
中的指针与objectId
匹配{1}}中的{1}}和_User
中的指针。
基本上我会用SQL中的内连接来解决。
如何通过一次解析来解决这个问题?
这是我到目前为止所做的:
Profile
答案 0 :(得分:2)
很高兴回答OP的问题,其中包括对数据的完整(和最小)描述以及期望的结果。
我想我明白你想要获得文章,并且每个你想获得个人资料,并且通过一个指向用户的公共指针(逻辑上)加入个人资料和文章。
这可以使用每篇文章的附加查询来完成。为了清晰和可维护性,我喜欢将这些内容分解为简短的逻辑承诺返回函数,所以......
// for handy array functions, like _.map, and turning var args into simple arrays
var _ = require('underscore');
// note: include underscore this way in cloud code (nodejs)
// for browser, see underscorejs.org to add to your project
// this will answer a promise that is fulfilled with an array of the form:
// [ { article:article_object, profile:profile_object }, {...}, ...]
function articlesWithProfiles() {
var query = new Parse.Query("Article");
query.include("category");
query.include("author");
return query.find().then(function(articles) {
var promises = _.map(articles, function(article) {
return profileForArticle(article);
});
return Parse.Promise.when(promises);
});
}
// return a promise that's fulfilled by associating the given article with it's profile
function profileForArticle(article) {
var author = article.get("author");
var query = new Parse.Query("Profile");
query.equalTo("user", author);
return query.first().then(function(profile) {
return { article:article, profile:profile };
});
}
// call it like this
articlesWithProfiles().then(function() {
// see edit below
var result = _.toArray(arguments);
console.log(JSON.stringify(result));
}, function(error) {
// handle error
console.log(JSON.stringify(error));
});