objectId上的PFQuery.find在分析JavaScript SDK(云代码)中未返回唯一行

PFQuery.find on objectId is not returning a unique row in Parse JavaScript SDK (Cloud Code)

本文关键字:代码 唯一 返回 SDK find PFQuery 上的 JavaScript objectId      更新时间:2023-09-26

我是解析和云代码的新手,但我已经成功地编写了一些运行良好的AfterSave云代码函数。然而,我在这个问题上遇到了很多麻烦,我不知道为什么。请帮忙。。。

我有

  • 两个PFObject类:Message和MessageThread
  • 消息包含与MessageThread关联的聊天消息
  • MessageThread包含一个成员数组(这些成员都是PFUsers)
  • 插入到Message后,我想查找相关MessageThread的所有成员,并向他们推送通知

    class MessageThread: PFObject {
        @NSManaged var members: [PFUser]
        @NSManaged var lastMessageDate: NSDate?
        @NSManaged var messageCount: NSNumber?
        override class func query() -> PFQuery? {
            let query = PFQuery(className: MessageThread.parseClassName())
            query.includeKey("members")
            return query
        }
        init(members: [PFUser], lastMessageDate: NSDate?, messageCount: NSNumber?) {
            super.init()
            self.members = members
            self.lastMessageDate = lastMessageDate
            self.messageCount = messageCount
        }
        override init() {
            super.init()
        }
    }
    extension MessageThread: PFSubclassing {
        class func parseClassName() -> String {
            return "MessageThread"
        }
        override class func initialize() {
            var onceToken: dispatch_once_t = 0
            dispatch_once(&onceToken) {
                self.registerSubclass()
            }
        }
    }
    class Message: PFObject {
        @NSManaged var messageThreadParent: MessageThread
        @NSManaged var from: PFUser
        @NSManaged var message: String
        @NSManaged var image: PFFile?
        override class func query() -> PFQuery? {
            let query = PFQuery(className: Message.parseClassName())
            query.includeKey("messageThreadParent")
            return query
        }
        init( messageThreadParent: MessageThread, from: PFUser, message: String, image: PFFile?) {
            super.init()
            self.messageThreadParent = messageThreadParent
            self.from = from
            self.message = message
            self.image = image
            }
        override init() {
            super.init()
        }
    }
    extension Message: PFSubclassing {
        class func parseClassName() -> String {
            return "Message"
        }
        override class func initialize() {
            var onceToken: dispatch_once_t = 0
            dispatch_once(&onceToken) {
                self.registerSubclass()
            }
        }
    }
    

接近

  • 从请求对象(Message)中,获取其messageThreadParent
  • 查找父MessageThread的成员,循环遍历它们,等等

问题

  • 当我尝试检索MessageThread对象时,我尝试在Id==threadParent.objectId上进行查询。但是,此查询总是返回我当前的全部8个MessageThread,而不是我需要的单个MessageThread。

    Parse.Cloud.afterSave(Parse.Object.extend("Message"), function(request) {
    Parse.Cloud.useMasterKey();
    var theMsg = request.object;
    var threadParent;
    var currUsername = request.user.get("username");
    var threadUsers;
    var usernameArray;
    threadParent = request.object.get("messageThreadParent");
    // promise 
    queryM = new Parse.Query(Parse.Object.extend("MessageThread"));
    queryM.include("members");
    queryM.equalTo("id", threadParent.objectId);
    queryM.find().then(function (threadParam) {
    console.log(" threads: ");
    console.log(threadParam.length); //this returns 8, which is the number of threads I have.  I would expect just 1, matching threadParent.objectId...
    console.log("thread is: ");
    //... additional code follows, which seems to work...
    

在解决了一个单独的问题一整天之后,我终于发现在Parse的Javascript SDK中"id"answers"objectId"之间有区别。

更改此

 queryM.equalTo("id", threadParent.objectId); // doesn't work

 queryM.equalTo("objectId", threadParent.id); // works!

解决了我的问题。