【问题标题】:Parse.com Retrieve a Pointer object inside an Array of custom objectsParse.com 在自定义对象数组中检索指针对象
【发布时间】:2015-12-31 14:15:54
【问题描述】:

我有一个作为数组的列,我在其中存储带有指向 _User 实体的指针的数据:

[{
  "score": 500,
  "user":{
    "__type":"Pointer",
    "className":"_User",
    "objectId":"b80TtUfOwH"
  }
}, {
  "score": 1000,
  "user":{
    "__type":"Pointer",
    "className":"_User",
    "objectId":"b80TtRdaw"
  }
}]

我想检索整个数组作为包含填充的用户属性(表是团队,成员是数组列):

var query = new Parse.Query("Team");
query.include("members");
query.include("members.user");

我已经尝试了这些包含,并且正在检测到用户但未填充。

是否有可能在一个查询中做到这一点?如何?

我想使用 Array Column(没有数组指针),因为它不会超过 10,我只想要一个查询。

【问题讨论】:

  • 怎么样 2 ,并行数组(分数,用户通过索引值相关)。然后,使用纯指针数组(类 _User ),您可以通过额外的“获取”来获取它们。
  • 我想过这一点,但我还需要过滤“我是管理员”的团队(这也是另一个字段是管理员)。对于我按用户 ID 过滤的查询,我不知道另一个数组(在同一个位置)中是否有 isAdmin = true。我开始认为最好的方法是创建第二个表“成员”并在那里使用关系而不是数组

标签: parse-platform parse-javascript-sdk


【解决方案1】:

如果您尝试过的方法不起作用,那么我认为这是不可能的。

另一种方法是在云代码中执行此操作,您可以在其中快速获取所有嵌套内容并将其格式化为单个响应。

【讨论】:

    【解决方案2】:

    EDIT 现在我明白了这个问题......数组中的对象不是指针。包含指针与成为指针不同。 include 的巧妙表述无法获取用户。

    做什么? 团队的成员都是人。这是一个相当普遍的事实,所以我建议将 members 属性更改为实际指针数组。有了这个,我第一次编辑的这个建议就可以了,不过,我想你已经知道了......

    var query = new Parse.Query("Team");
    query.include("members");
    query.find().then(function(teams) {
        // teams will contain fully fetched users in the members property
    });
    

    但是数组对象中的其他数据应该去哪里呢?这取决于该数据的含义。数据是否真的属于团队和成员之间的关系? (一个很好的例子可能是职业球员与球队的合同)。 “分数”听起来不像这样的东西。我会找别的地方放它(比如放在记录游戏的对象中)。

    一般来说,当 ClassA 和 ClassB 相关时(Team -> User for you),属性有三个地方:在每个类上和它们之间的关系上。如果某个属性确实必须属于该关系,那么您将需要一个 ClassC,它将携带该属性。

    还有一点:即使是一个属性确实属于一个关系,你也经常可以把它骗到目标类(ClassB)中。例如,职业球员的合同可能属于他/她与球队的关系,但如果他们一次只与一支球队签约,你可以稍微作弊并将其附加到球员身上。

    【讨论】:

    • 我的问题是数组的每个对象中都有更多信息。它不仅仅是一个指向用户的指针数组,它还有更多与用户无关的信息,而是与用户关联的成员。如果它只是一组用户指针,你的例子的方式会起作用,有什么想法吗?谢谢!
    • 我明白了。我应该从你的问题中明白这一点。请参阅编辑
    • 是的,以“score”为例,实际上会有 displayName 和 isAdmin 这两个属性属于团队和用户(作为成员)之间的关系。为了简单起见,我试图避免创建一个新类,因为每个团队的成员不会超过 10 人,而且我想成为一个快速获取和更简单的保存。感谢您的帮助!
    • 当然,不过请注意我的最后一段。如果团队成员一次只有一个,您可以将 displayName 和 admin 放在用户上。
    • 是的,但一个用户可以在多个团队中,因此它可以拥有多个 displayName 并在某些但不是所有团队中成为管理员
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多