我对Parse很新。
我使用此代码设置了数据库:
var Class = Parse.Object.extend("Class");
var Team = Parse.Object.extend("Team");
var Student = Parse.Object.extend("Student");
var newClass = new Class();
newClass.set("name", className);
newClass.set("code", classCode);
newClass.set("creator", currentUser);
var classACL = new Parse.ACL(currentUser);
classACL.setPublicReadAccess(true);
newClass.setACL(classACL);
newClass.save();
for (var i = 0; i < teamNames.length; i++) {
var team = new Team();
team.set("name", teamNames[i]);
var teamACL = new Parse.ACL(currentUser);
teamACL.setPublicReadAccess(true);
team.setACL(teamACL);
team.save();
for (var j = 0; j < studentNames[i].length; j++) {
if (studentNames[i][j]) {
var student = new Student();
student.set("name", studentNames[i][j]);
student.set("parent", team);
student.save();
}
}
team.set("parent", newClass);
team.save();
}
newClass.save(null, {
success: function(newClass) {
//success
},
error: function(newClass, error) {
//fail
}
});
此处Class
,Team
和Student
被建模为一对多关系。
现在,当学生使用自己的用户帐户注册课程时,相应的Student
user
列会设置为当前用户。
然后我想列出creator
或其学生user
列之一(如果存在)等于currentUser
的所有课程。
如何在Parse中创建引用多个类的此类查询(或者如何优化数据库以使这样的查询尽可能高效 - 而无需创建两个单独的查询?)
感谢任何帮助。
澄清:
我知道我可以按照解析文档中的描述进行查询(我应该在问题中说明这一点),但是,我的问题是关于关系数据(由父类的指针类型属性定义)。在这里,我需要user是Student实例的属性,属于Team,然后是Class,我想只过滤具有其creator属性或其孙子(Student的一个实例)用户的Class对象property等于currentUser,只列出您创建或注册为学生的类。
答案 0 :(得分:1)
好的,你想在OR查询中用内部子查询做什么。一次解析调用,您可以使用子查询过滤学生属性。
var studentQuery = new Parse.Query(Student);
studentQuery.equalTo("user", Parse.User.current());
var firstQuery = new Parse.Query(Class);
firstQuery.matchesQuery("student", studentQuery);
var secondQuery = new Parse.Query(Class);
secondQuery.equalTo("creator", Parse.User.current());
var mainQuery = Parse.Query.or(firstQuery, secondQuery);
mainQuery.find({
success: function(results) {
// results contains a list of Classes where the user is either the creator or the user property of the student (if available)
},
error: function(error) {
// There was an error.
}
});
答案 1 :(得分:1)
由于当前数据库模式具有嵌套指针,因此没有简单的方法可以在不进行调整的情况下实现此目的。
在Class
课程中,添加Relation
或Array
字段以包含对Student
/ User
个对象的引用。如果您使用User
作为对象指针,我们最初不需要查找Student
。
我假设您在students
课程中有Array
个新Class
字段。 students
包含User
个对象。
var user = Parse.User.current();
var studentQuery = new Parse.Query(Class);
var creatorQuery = new Parse.Query(Class);
studentQuery.equalTo("students", user);
creatorQuery.equalTo("creator", user);
var query = Parse.Query.or(studentQuery, creatorQuery);
query.find().then(function(objects){
// Proceed with the results
},function(error){
// Handle error
});