如何使用指针在 Parse CloudCode 中查询?
How to Query in Parse CloudCode using Pointers?
我在两个 classes 之间有一个指针关系,我需要获取 class A thought class B。当我使用 Rest 和 Android 时它工作正常SDK,但我正在 CloudCode 中构建一个函数,它需要在那里工作。
任务(指向)额外任务
我需要获取给定任务指向的所有 ExtraTasks。
有什么想法吗? tks
- 指针键:taskExtraTasks
- "Parent" Class: 任务
- "Child" Class: 额外任务
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 文档中缺乏信息,我弄错了 Relation 和 Pointer 并且无法理解它。如果您遇到和我一样的问题,我建议使用 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();
})
最后一件事可能是问题所在:
您的代码似乎指出 task
和 extraTask
之间存在一对多关系
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。这样你就可以在你的代码中使用我的原始答案(但更重要的是,这将是创建这种关系的正确方法)
我在两个 classes 之间有一个指针关系,我需要获取 class A thought class B。当我使用 Rest 和 Android 时它工作正常SDK,但我正在 CloudCode 中构建一个函数,它需要在那里工作。
任务(指向)额外任务
我需要获取给定任务指向的所有 ExtraTasks。
有什么想法吗? tks
- 指针键:taskExtraTasks
- "Parent" Class: 任务
- "Child" Class: 额外任务
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 文档中缺乏信息,我弄错了 Relation 和 Pointer 并且无法理解它。如果您遇到和我一样的问题,我建议使用 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();
})
最后一件事可能是问题所在:
您的代码似乎指出 task
和 extraTask
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。这样你就可以在你的代码中使用我的原始答案(但更重要的是,这将是创建这种关系的正确方法)