แยกวิเคราะห์แบบสอบถามจาก 2 คอลเลกชัน

ฉันใช้ Parse ในแอป iOS Swift และกำลังประสบปัญหาในการหาวิธีสืบค้นในสองคอลเลกชัน ฉันคิดว่าคล้ายกับการเข้าร่วม

ฉันมีรายชื่อหลายรายการและมีข้อมูลบ้านและรหัสผู้ใช้ ฉันได้เพิ่มค่าคีย์ให้กับคอลเลกชันผู้ใช้ที่ระบุว่าผู้ใช้ลาพักร้อนหรือไม่ ข้อความค้นหาที่ฉันต้องการทำคือค้นหารายการทั้งหมดที่ผู้ใช้ไม่ได้ลาพักร้อน

นี่คือโค้ดแยกวิเคราะห์ที่ใช้ในการดึงข้อมูลรายการ แต่ฉันไม่รู้ว่าจะเพิ่มเงื่อนไขที่สองจากคอลเลกชันผู้ใช้ได้อย่างไร

            let query = PFQuery(className: "Listing")
        query.order(byDescending: "createdAt")
        query.whereKey("categoryHome", equalTo: type.rawValue)
        query.limit = limit
        query.skip = skip
        query.findObjectsInBackground { (objects, error) -> Void in
            if let objects = objects as? [Listing]
            {
                success(objects)
            }
            else
            {
                let error = error! as NSError
                let errorMessage = "\(error.localizedDescription)\n(\(error.code))"
                SVProgressHUD.showError(withStatus: errorMessage)
            }
        }

ฉันจะทำสิ่งนี้เพื่อสอบถามผู้ใช้ แต่ฉันต้องเพิ่มลงในแบบสอบถามด้านบน

    let userQuery = PFUser.query()
    userQuery.whereKeyDoesNotExist("onVacation")

ดังนั้น ฉันจะรวมสิ่งเหล่านั้นเข้าด้วยกันเพื่อสร้างแบบสอบถามเดียวที่ค้นหารายการสินค้าทั้งหมดที่ผู้ใช้ไม่ได้ลาพักร้อนได้อย่างไร

หากมีใครสามารถแสดงตัวอย่างข้อมูลสั้นๆ ให้ฉันดู หรือชี้ให้ฉันดูตัวอย่างที่มีการสืบค้นในสองคอลเลกชันก็จะดีมาก ฉันได้อ่านเอกสารแยกวิเคราะห์เกี่ยวกับความสัมพันธ์ การแสวงหา ฯลฯ แล้ว แต่ยังไม่เข้าใจวิธีรวมสองคำถามข้างต้นเข้าด้วยกัน

ขอบคุณสำหรับความช่วยเหลือใด ๆ


person LilMoke    schedule 28.08.2018    source แหล่งที่มา


คำตอบ (1)


จากโพสต์ของคุณยังไม่ชัดเจนว่าคุณเชื่อมโยงผู้ใช้กับรายการอย่างไร แต่สมมติว่ารายการมีตัวชี้ไปยังผู้ใช้ คุณสามารถทำสิ่งนี้ได้

var userQuery = PFUser.query()
userQuery!.whereKeyDoesNotExist("onVacation")
var listQuery = PFQuery(className:"Listing")
listQuery.whereKey("categoryHome", equalTo: type.rawValue)
listQuery.whereKey("user", matchesQuery: userQuery!)
listQuery.findObjectsInBackgroundWithBlock {
   (results: [PFObject]?, error: NSError?) -> Void in
   if error == nil {
   // results will contain lists where the user is not on vacation
   }
}

หากคุณต้องการอ่านเพิ่มเติมเกี่ยวกับ matchesQuery โปรดดูคู่มือแยกวิเคราะห์ iOS

person LulzCow    schedule 28.08.2018
comment
OMG ฉันคิดว่านั่นคือสิ่งที่ฉันกำลังมองหา ขอบคุณฉันจะลอง และเพื่อตอบข้อสงสัยของคุณ ฉันมีรหัสผู้ใช้ที่จะได้รับจากรายการ... เมื่อเข้าใจถึงปัญหาแล้ว ควรเป็นตัวชี้ผู้ใช้ ขอบคุณอีกครั้ง ฉันจะลองอีกครั้งเร็วๆ นี้ - person LilMoke; 29.08.2018
comment
@LilMoke แม้ในกรณีที่คุณใช้ User id คุณสามารถใช้ matchesKeyInQuery แทนได้ (โดยที่ userId และ objectId เป็นสองคีย์ที่คุณจับคู่) โปรดใช้ความระมัดระวังด้วยmatchQuery เนื่องจากอาจไม่มีประสิทธิภาพมากนักหากแบบสอบถามของคุณไม่ได้เลือกสรรมากนักและคุณมีคอลเลกชันขนาดใหญ่ - person LulzCow; 29.08.2018
comment
อ่า ดีใจที่ได้รู้ ใช่ ฉันเข้าใจแล้ว ฉันคงพลาดคำค้นหาที่ตรงกันไปแล้ว ขอบคุณสำหรับทิป. - person LilMoke; 29.08.2018