解析 Cloud Code 关系查询语法

Posted

技术标签:

【中文标题】解析 Cloud Code 关系查询语法【英文标题】:Parse Cloud Code relational query syntax 【发布时间】:2014-04-09 10:53:01 【问题描述】:

我在Parse 上有一个云功能。当它被调用时,它会检索一个PFObject,然后在该对象和用户之间添加一个关系。这部分工作正常(见函数末尾)。 我无法获取选择 PFObject 以忽略用户已经相关的查询

这是我的代码:

Parse.Cloud.define("NextMedia", function (request, response) 

    var LikeRequest = Parse.Object.extend("LikeRequest");
    var query = new Parse.Query(LikeRequest);

    query.equalTo("completed", false);
    console.log("user: " + Parse.User.current().id);

    query.notEqualTo("user", Parse.User.current());

    // Also only fetch if never been sent before 
    // HERE SHOULD USE THE BELOW RELATIONSHIP
    var innerQuery = new Parse.Query(Parse.User);
    innerQuery.exists(Parse.User);
    query.matchesQuery("sentTo", innerQuery);

    query.ascending("createdAt");

    query.first(

        success: function (object) 
            // Successfully retrieved the object.
            console.log("Got 1 object: " + object.get('mediaId'));

            // Record that the user has been sent it
            var user = Parse.User.current();
            var relation = object.relation("sentTo"); // RELATION ADDED HERE

            relation.add(user);
            object.save();

            response.success(object);
        ,
        error: function (error) 
            console.log("Error: " + error.code + " " + error.message);

            response.error("Error getting next mediaId");
        
    );
);

我确定我只是不理解关系查询语法的工作原理。

【问题讨论】:

在您的 LikeRequest 类中,您有用户列吗?我不明白 query.notEqualTo("user", Parse.User.current()); 在添加关系的底部,添加了多对多用户列。 抱歉延迟回复。你有没有尝试过这样的事情: var innerQuery = LikeRequest.relation("sendTo").query(); innerQuery.exists(Parse.User); 我已经离开几天了,等我回来再试试。谢谢 现在才意识到这是一个非常古老的问题。你有没有找到解决方案? 【参考方案1】:

这一段:

// Also only fetch if never been sent before 
// HERE SHOULD USE THE BELOW RELATIONSHIP
var innerQuery = new Parse.Query(Parse.User);
innerQuery.exists(Parse.User);
query.matchesQuery("sentTo", innerQuery);

可以改为:

// Also only fetch if never been sent before 
query.notContainedIn("sentTo",[Parse.User.current()])

这行得通。Parse Query

【讨论】:

【参考方案2】:

Query Constraints 呢?

如果要检索与多个值中的任何一个都不匹配的对象,可以使用 notContainedIn

  // Finds objects from anyone who is neither Jonathan, Dario, nor Shawn
query.notContainedIn("playerName",
                     ["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]);

【讨论】:

【参考方案3】:

我认为 Kerem 部分正确,但 notContained in 对于您的情况来说不够动态。

您需要构造query from the relation,然后使用doesNotMatchKeyInQuery 从外部查询中排除这些对象。

【讨论】:

以上是关于解析 Cloud Code 关系查询语法的主要内容,如果未能解决你的问题,请参考以下文章

lucene查询解析器语法

Cloud Spanner - `SHOW TABLES` 的等效语法?

使用 JPA 解析琐碎查询的语法错误

SyntaxException: <ErrorMessage code=2000 [CQL 查询中的语法错误] message="Unknown property 'replicati

教你使用Jupyter可视化查询语句的语法树

ES查询语法解析