Parse.com 查询指针数组时出现问题,.include 未在云代码中获取嵌套指针数据
Parse.com issues while querying array of pointers, .include not getting nested pointer data in cloud code
我无法从查询的指针数组中的嵌套指针中获取数据。我有一个这样的指针数组:[{"__type":"Pointer","className":"QuizData","objectId":"rmwJrV55c7"}, {""__type":"Pointer","className":"QuizData","objectId":"2132q8i9np"}, 等等...]
QuizData class 还有一个名为“ad”的列,它是指向“Ads”class 的指针。我可以在查询中使用以下 include 语句在查询中获取 QuizData,如下所示:
var __quizAdQueueQuery = new Parse.Query(QuizAdQueue);
__quizAdQueueQuery.equalTo("user", __request.user);
__quizAdQueueQuery.include("quizAdArr”);
__quizAdQueueQuery.include(["quizAdArr.QuizData"]);
但是这些或两者组合都不起作用,因为当我尝试从广告中获取列数据时,它始终未定义:
__quizAdQueueQuery.include(["quizAdArr.QuizData.ad"]);
__quizAdQueueQuery.include(["quizAdArr.QuizData.Ads"]);
这是我的 return 来自该查询,其中我尝试访问的列数据 "mediaType" 始终未定义:
return __quizAdQueueQuery.first().then(function(__resultsObj)
{
__quizQueueObj = __resultsObj;
__userQuizQueueArr = __quizQueueObj.get("quizAdArr");
var __quiz;
var __ad;
var __seenAd;
var __lengthInt = __userQuizQueueArr.length;
var __mediaTypeStr = __request.params.mediaType;
var __matchedQuizzesArr = [];
for (var __i = 1; __i < __lengthInt; __i++)
{
__quiz = __userQuizQueueArr[__i];
// console.log('__quiz.get("name") = '+__quiz.get("name"));
__ad = __quiz.get("ad");
// console.log("__ad.id = "+__ad.id);
//THE MEDIA TYPE IS ALWAYS RETURNING UNDEFINED HERE!!!
console.log('__ad.get("mediaType") = '+__ad.get("mediaType")+', __mediaTypeStr = '+__mediaTypeStr);
if (__ad.get("mediaType") == __mediaTypeStr)
{
//put all matches in array to be sorted
__matchedQuizzesArr.push(__userQuizQueueArr[__i]);
console.log("__matchedQuizzesArr.length = "+__matchedQuizzesArr.length);
}
}
return __matchedQuizzesArr;
});
感谢您提供的任何帮助!我还在 Parse/Facebook 问题报告器中将此作为错误发布,但被重定向到此处,因此如果这是一个错误,我可以重新打开它:https://developers.facebook.com/bugs/923988310993165/
编辑为清楚起见,这里是更新后的工作查询,其中包含嵌套包含:
var __quizAdQueueQuery = new Parse.Query(QuizAdQueue);
__quizAdQueueQuery.equalTo("user", __request.user);
__quizAdQueueQuery.include('quizAdArr');
__quizAdQueueQuery.include('quizAdArr.ad');
这应该可行(您只需要列出列名):
query.include('quizAdArr.ad');
原因如下:
- 您正在查询
QuizAdQueue
,因此您不需要列出
QuizAdQueue
class 在 quizAdArr
中有一个数组,因此您将其包括在内:query.include('quizAdArr');
- 每个
quizAdArr
元素都是一个带有 ad
的 QuizData
,因此您将其包括在内:query.include('quizAdArr.ad');
问题是您包含了 QuizData
,它是 class 的名称,而不是列名称
我无法从查询的指针数组中的嵌套指针中获取数据。我有一个这样的指针数组:[{"__type":"Pointer","className":"QuizData","objectId":"rmwJrV55c7"}, {""__type":"Pointer","className":"QuizData","objectId":"2132q8i9np"}, 等等...]
QuizData class 还有一个名为“ad”的列,它是指向“Ads”class 的指针。我可以在查询中使用以下 include 语句在查询中获取 QuizData,如下所示:
var __quizAdQueueQuery = new Parse.Query(QuizAdQueue);
__quizAdQueueQuery.equalTo("user", __request.user);
__quizAdQueueQuery.include("quizAdArr”);
__quizAdQueueQuery.include(["quizAdArr.QuizData"]);
但是这些或两者组合都不起作用,因为当我尝试从广告中获取列数据时,它始终未定义:
__quizAdQueueQuery.include(["quizAdArr.QuizData.ad"]);
__quizAdQueueQuery.include(["quizAdArr.QuizData.Ads"]);
这是我的 return 来自该查询,其中我尝试访问的列数据 "mediaType" 始终未定义:
return __quizAdQueueQuery.first().then(function(__resultsObj)
{
__quizQueueObj = __resultsObj;
__userQuizQueueArr = __quizQueueObj.get("quizAdArr");
var __quiz;
var __ad;
var __seenAd;
var __lengthInt = __userQuizQueueArr.length;
var __mediaTypeStr = __request.params.mediaType;
var __matchedQuizzesArr = [];
for (var __i = 1; __i < __lengthInt; __i++)
{
__quiz = __userQuizQueueArr[__i];
// console.log('__quiz.get("name") = '+__quiz.get("name"));
__ad = __quiz.get("ad");
// console.log("__ad.id = "+__ad.id);
//THE MEDIA TYPE IS ALWAYS RETURNING UNDEFINED HERE!!!
console.log('__ad.get("mediaType") = '+__ad.get("mediaType")+', __mediaTypeStr = '+__mediaTypeStr);
if (__ad.get("mediaType") == __mediaTypeStr)
{
//put all matches in array to be sorted
__matchedQuizzesArr.push(__userQuizQueueArr[__i]);
console.log("__matchedQuizzesArr.length = "+__matchedQuizzesArr.length);
}
}
return __matchedQuizzesArr;
});
感谢您提供的任何帮助!我还在 Parse/Facebook 问题报告器中将此作为错误发布,但被重定向到此处,因此如果这是一个错误,我可以重新打开它:https://developers.facebook.com/bugs/923988310993165/
编辑为清楚起见,这里是更新后的工作查询,其中包含嵌套包含:
var __quizAdQueueQuery = new Parse.Query(QuizAdQueue);
__quizAdQueueQuery.equalTo("user", __request.user);
__quizAdQueueQuery.include('quizAdArr');
__quizAdQueueQuery.include('quizAdArr.ad');
这应该可行(您只需要列出列名):
query.include('quizAdArr.ad');
原因如下:
- 您正在查询
QuizAdQueue
,因此您不需要列出 QuizAdQueue
class 在quizAdArr
中有一个数组,因此您将其包括在内:query.include('quizAdArr');
- 每个
quizAdArr
元素都是一个带有ad
的QuizData
,因此您将其包括在内:query.include('quizAdArr.ad');
问题是您包含了 QuizData
,它是 class 的名称,而不是列名称