Parse platform 查找不在关系中的对象

Parse platform 查找不在关系中的对象,parse-platform,Parse Platform,我在解析中有一个自定义对象Team,其中包含一个默认User对象的关系字段。我想做的是检索与任何团队对象无关的所有用户对象。有人能告诉我如何使用JavaScript SDK实现这一点的正确方向吗?我一直在查阅文档,但什么也找不到 也许另一种类型的关系,或者将关系放置在另一个位置是更好的解决方案。我想做到的是:每个用户都可以加入一个团队,并且只能加入一个团队。此外,我需要能够从Parse查询以下信息: 我想检索分配给团队的所有用户的User对象 我想检索未分配给任何团队的所有用户的User对象

我在解析中有一个自定义对象
Team
,其中包含一个默认
User
对象的关系字段。我想做的是检索与任何
团队
对象无关的所有
用户
对象。有人能告诉我如何使用JavaScript SDK实现这一点的正确方向吗?我一直在查阅文档,但什么也找不到

也许另一种类型的关系,或者将关系放置在另一个位置是更好的解决方案。我想做到的是:每个用户都可以加入一个团队,并且只能加入一个团队。此外,我需要能够从Parse查询以下信息:

  • 我想检索分配给团队的所有用户的
    User
    对象
  • 我想检索未分配给任何团队的所有用户的
    User
    对象
我已经尝试使用带有用户和团队对象ID的联接表。然后,我尝试执行以下查询以获取未分配给团队的所有用户:

var teammember = Parse.Object.extend('TeamMember'),
    query = new Parse.Query("User");

var innerQuery = new Parse.Query("TeamMember");

query.doesNotMatchQuery('user', innerQuery);
query.find({
    success: function(results) {
        response.success(results);
    },
    error  : function(error) {
        response.error(error);
    }
})
但这只是得到了以下响应:
错误:“{code:102”,消息:“$notInQuery的错误类型”}”


我喜欢
关系
类型,因为我可以通过对RESTAPI的一次调用一次添加或删除多个成员。在使用
关系
类型将用户连接到团队时,检索团队成员的信息也没有问题。这只是让没有分配到任何团队的用户给我带来问题。

听起来你根本不需要关系。相反,为指向团队的用户添加一个指针列。它确保一个用户只能属于一个团队,您的其他需求可以按如下方式捕获

//分配给团队的所有用户
query=newparse.query('User');
query.exists('team');
//分配给特定团队的所有用户
query=newparse.query('User');
query.equalTo(“团队”,具体团队);
//所有未分配的用户
query=newparse.query('User');
query.doesNotExist(“团队”);
更新:如果将来需要为每个用户支持多个团队,那么我建议创建一个名为Membership的解析表,其中包含两列:指向用户的指针和指向团队的指针。这本质上比依赖解析关系提供了更多的控制,但它变得更复杂一些

要求('下划线');//还是洛达斯
//分配给团队的所有用户
query=newparse.query('Membership');
query.find().then(函数(结果){
// http://underscorejs.org/#uniq
users=uq.uniq(结果,false,函数(user){return user.id;});
});
//分配给特定团队的所有用户
query=newparse.query('Membership');
query.equalTo(“团队”,具体团队);
//所有未分配的用户
var assignedUsers=[]
var unassignedUsers=[]
memberQuery=newparse.Query('Membership');
userQuery=newparse.Query('User');
memberQuery.find().then(函数(memberResults){
// http://underscorejs.org/#map
var id=u2;.map(memberResults,函数(用户){return user.id;});
// http://underscore.js.org/#uniq
assignedUsers=uq.uniq(ids);
userQuery.find();
}).then(函数(用户结果){
var users=u2;.map(userResults,函数(user){return user.id;});
// http://underscorejs.org/#difference
未分配的用户=u0.difference(用户、已分配的用户);
});

要将用户添加到团队或从团队中删除用户,您需要创建成员身份对象,并使用
Parse.Object.saveAll()
Parse.Object.destroyAll()
保存API调用。我遇到了Seth提供的答案的问题。检索未分配给团队的用户时,两个数组之间的差异将不正确。我假设这是由于
assignedUsers
具有
Membership
类型的对象和
userResults
具有
User
类型。这将使下划线无法进行正确匹配

我会将此用作我的云代码:

Parse.Cloud.define(“getteamlessuers”),函数(请求、响应){
var=要求(“下划线”),
assignedUsers=[],
公司用户=[],
memberQuery=新建Parse.Query(“团队成员”),
userQuery=new Parse.Query(“用户”),
指数
乌邦;
memberQuery.find().then(函数(memberResults){
//确保每个用户ID只显示一次
memberResults=\ uu0.unique(memberResults,false,函数(项){return item.get('user').id;});
//循环遍历唯一的团队成员,并将用户ID推送到数组中
for(index=0,ubound=memberResults.length;index
您能详细介绍一下您的物品吗?您是否有一个团队对象,其中每个“团队”都有一个对一个“用户”的引用?我的
团队
对象有一个类型为
关系
的列,该列被键入默认的
用户
对象。通过这种结构,每个团队可以分配多个用户(一个指针不够,一个数组限制为100个成员,我不知道将来是否会太少)。很抱歉再次询问,但是因为“关系”既不是数组也不是数组
Parse.Cloud.define("getTeamlessUsers", function(request, response) {
    var _ = require("underscore"),
        assignedUsers = [],
        companyUsers = [],
        memberQuery = new Parse.Query("TeamMembers"),
        userQuery = new Parse.Query("User"),
        index,
        ubound;

    memberQuery.find().then(function(memberResults) {
        // Make sure each User ID will appear just once
        memberResults = _.unique(memberResults, false, function(item) { return item.get('user').id; });
        // Loop over the unique team members and push the User ID into the array
        for (index = 0, ubound = memberResults.length; index < ubound; index++) {
            var user = memberResults[index].get("user");
            assignedUsers.push(user.id);
        }
        // Get al the users
        return userQuery.find();
    }).then(function(userResults) {
        // Loop over all the users and push the ID into the array 
        for (index = 0, ubound = userResults.length; index < ubound; index++) {
            companyUsers.push(userResults[index].id);
        }
        // Create an array of user IDs which are not present in the assignedUsers array
        var result = _.difference(companyUsers, assignedUsers);
        // Return the IDs of user not assigned to any team
        response.success(result);
    }).fail(function(error) {
        response.error(error);
    });
});