如何在云代码中执行关系查询?

问题描述 投票:1回答:1

我有名为_User&Photo&PhotoJourney的课程。我想根据某些动作向随机用户发送照片。在PhotoJourney类中,我有一个字段photo(Pointer to Photo类)和photoSentTo(指向_User类的指针)。

我的要求是让所有用户排除那些已发送照片的用户。

var PhotoObj = Parse.Object.extend("Photo");
var photo = new PhotoObj();
photo.id = request.params.photoId;

var Query1 = new Parse.Query("User");

var Query2 = new Parse.Query("PhotoJourney");
Query2.select("photoSentTo");
Query2.equalTo("photoID", photo);

Query1.doesNotMatchKeyInQuery("objectId", "photoSentTo", Query2);
Query1.find({
    success: function(results)
    {
    },
    error : function() 
    {
    }
});

如果我执行Query2.find(),它会给我正确的结果。即我要从_User表中排除的用户列表,但我不知道如何执行此操作以及将哪些参数传递给doesNotMatchKeyInQuery("","","")

我对云代码开发很陌生。如果我做错了,请纠正我。

提前致谢。

javascript parse-platform
1个回答
1
投票

对不起,我其实不认为你只能用查询来解决这个问题。我想你需要这样做:

  1. 获取所有PhotoJourney对象的列表,其中照片与当前照片匹配。
  2. 通过检索所有photoSentTo对象(excludeUsers)中的PhotoJourney对象来创建用户对象列表
  3. 查询所有用户(allUsers)
  4. 由于您现在有两个用户对象列表,因此从excludeUsers中存在的所有用户中筛选出对象

结果列表是可用于获取随机用户的列表。

如果你有很多用户,这是一个非常繁重的操作。您应该创建一个云代码函数,在服务器上执行此任务,并仅返回随机用户对象。

或者,您可以在Photo对象上创建一个新字段(或为其创建一个连接表),其中包含指向已收到Photo的所有用户的指针数组。然后,在查询用户时,您可以排除此列表中存在的用户。或者数组只能包含objectID,您可以在用户查询中将其用作约束:

userQuery.notContainedIn("objectId", photo.get("sentToUsers")); // Array of objectIds of receivers
© www.soinside.com 2019 - 2024. All rights reserved.