如何使用指针在Parse CloudCode中查询?

时间:2015-10-01 04:12:17

标签: javascript parse-platform cloud-code

我有两个类之间的指针关系,我需要获取A类思想类B.当我使用Rest和Android SDK时它工作正常,但我在CloudCode中构建一个函数,它需要在那里工作

任务(指向) ExtraTasks

我需要获取给定任务所指向的所有ExtraTasks。

有什么想法吗? TKS

  • 指针键: taskExtraTasks
  • "父"分类:任务
  • "儿童"分类: ExtraTasks

任务及其关系 Tasks class

在taskExtraTask关系中 enter image description here

构造指针(关系?)的JSON。该关系是通过 REST api 构建的。

{"taskExtraTasks": 
  {
    "__op":"AddRelation",
    "objects":
        [
            {
                "__type":"Pointer",
                "className":"Tasks",
                "objectId":"TASK_ID"
            }
        ] 
  } 
}

CloudCode 获取关系。 (考虑 JackalopeZero 的建议)

Parse.Cloud.define("extras", function(request, response) {
  var taskId = "0n5svlATjG";
  var taskQuery = new Parse.Query("Tasks");
  taskQuery.get(taskId).then(function(task){
    var taskRelationQuery = task.relation("taskExtraTasks");
    taskRelationQuery.equalTo("taskExtraTasks", task);
    return taskRelationQuery.find();
  })
  .then(function(extraTasks){
    // your extra tasks are now accessible here
    response.success( extraTasks );
  },function(error){
    response.error( error );
  });
});

响应:

{
  "code": 141,
  "error": "{\"code\":101,\"message\":\"Object not found.\"}"
 }

注意:以下答案是正确的,尽管我的问题有点复杂。我错了 Relation Pointer ,由于REST文档中缺少信息,我无法理解它。如果你被困在我身上,我建议使用Parse UI创建指针和关系。之后,您可以使用REST来处理这些问题。 使用UI创建指针列后,可以使用JSON obj通过REST添加点:

// Pointer CLASS_A -> CLASS_B
// Method: "PUT" , path: classes/CLASS_B/CLASS_B_OBJECT_ID
{"pointerName": 
{
    "__type"    :"Pointer",
    "className" :"CLASS_A",
    "objectId"  :"CLASS_A_OBJECT_ID"
}    

}

1 个答案:

答案 0 :(得分:1)

如果您只是查询,则无需扩展。你可以改变:

var ExtraTasks  = Parse.Object.extend("ExtraTasks");
        var qExtra = new Parse.Query(ExtraTasks);

为:

var qExtra = new Parse.Query("ExtraTasks");

此外,只需确保如果您在Parse中使用指针查询,则需要确保使用Parse对象进行查询,而不仅仅是ID。

例如,如果任务列是类型指针,则不起作用:

var taskId = "13jkasd";
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo("task", taskId);
return userQuery.find();

您需要使用:

var taskId = "13jkasd";
var taskQuery = new Parse.Query("Task");
taskQuery.get(taskId).then(function(task){
    var userQuery = new Parse.Query(Parse.User);
    userQuery.equalTo("task", task);
    return userQuery.find();
})

最后一件事可能是问题:

您的代码似乎指出taskextraTask

之间存在一对多的关系
qExtra.equalTo("taskExtraTasks", task );

如果要查询关系,则需要稍微改变一下。将关系视为未在界面上显示的连接表,您需要查询该连接表。

var taskId = "0n5svlATjG";
var taskQuery = new Parse.Query("Task");
taskQuery.get(taskId).then(function(task){
    var taskRelationQuery = task.relation("taskExtraTasks");
    taskRelationQuery.equalTo("task", task);
    return taskRelationQuery.find();
})
.then(function(extraTasks){
    // your extra tasks are now accessible here
});

有关关系的更多信息,请查看Parse JS developers guide.

<强> BUT ...

此处的问题似乎源于您评论中的代码。您正在关系中添加指针。如果你有一对多的关系,你不需要触摸关系,你只需要在任务表中使用指针列。只需使用指向任务的指针创建新的extraTask。这样你就可以在你的代码中使用我的原始答案(但更重要的是,这将是创建这种关系的正确方法)