Разобрать запрос из 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, ознакомьтесь с руководством по Parse iOS

person LulzCow    schedule 28.08.2018
comment
OMG, я думаю, это то, что я искал. Спасибо, я попробую. И, чтобы ответить на ваш вопрос, у меня есть идентификатор пользователя, который нужно получить из списка... оглядываясь назад, это должен быть указатель пользователя. Еще раз спасибо, я попробую в ближайшее время. - person LilMoke; 29.08.2018
comment
@LilMoke, даже если вы просто используете идентификатор пользователя, вместо этого вы можете использовать matchesKeyInQuery (где userId и objectId — это два ключа, которые вы сопоставляете). Однако будьте осторожны с matchQuery, потому что они могут быть очень неэффективными, если ваши запросы не очень избирательны и у вас большие коллекции. - person LulzCow; 29.08.2018
comment
Аааа, приятно знать. И да, я понял, я, должно быть, пропустил matchQuery. Спасибо за чаевые. - person LilMoke; 29.08.2018