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 元素都是一个带有 adQuizData,因此您将其包括在内:query.include('quizAdArr.ad');

问题是您包含了 QuizData,它是 class 的名称,而不是列名称