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

标签 javascript parse-platform cloud pfquery

我是 Parse 和 Cloud Code 的新手,但我已经成功编写了一些运行良好的 AfterSave Cloud Code 函数。然而,我在这方面遇到了很多麻烦,我不明白为什么。请帮忙...

我有

  • 两个 PFObject 类:Message 和 MessageThread
  • 消息包含与 MessageThread 关联的聊天消息
  • MessageThread 包含一个成员数组(都是 PFUser)
  • 插入消息后,我想查找相关 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()
            }
        }
    }
    

方法

  • 从请求对象(消息)中获取其 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”和“objectId”之间存在差异。

改变这个

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

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

解决了我的问题。

关于javascript - objectId 上的 PFQuery.find 未在 Parse JavaScript SDK(云代码)中返回唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687343/

相关文章:

azure - 有没有办法自动垂直扩展 azure 云服务(经典)?

javascript - 以字符串形式获取网络用户的时区

ios - 使用 parse.com 设置关注者列表的最佳方法是什么

php - 如何跟上 PHP 框架的发展?

ios - 为什么缩放以填充给出比 UIImageVIew 尺寸更大的图像? (使用 swift )

ios - Swift Parse 如何使应用程序离线工作?

performance - 可根据应用程序级别指标扩展的一些应用程序用例是什么?

javascript - 从 Pandas Dataframe 到 Javascript Array

javascript - AngularJS 用户界面路由器 : Route conflict because of optional parameter

javascript - ajax加载所有DOM元素后如何加载函数