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

How to Query in Parse CloudCode using Pointers?

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

任务(指向)额外任务

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

有什么想法吗? tks

Class Tasks 和它的关系

在 taskExtraTask 关系中

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.\"}"
 }

注意: 下面的答案是正确的,尽管我的问题有点复杂。由于 REST 文档中缺乏信息,我弄错了 RelationPointer 并且无法理解它。如果您遇到和我一样的问题,我建议使用 Parse UI 创建指针和关系。之后,您可以使用 REST 来处理这些。 使用 UI 创建 Pointer 列后,您可以使用 JSON 对象通过 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"
}    

}

如果只是查询,则不需要扩展。您可以更改:

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 );

如果您查询的是关系,则需要略有不同。将关系视为未出现在您的界面上的联接 table,您需要查询该联接 table.

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.

但是...

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