Использование PFQuery для извлечения объектов PFInstallation, содержащих определенный элемент в их массиве?

#javascript #ios #objective-c #push-notification #parse-platform

#javascript #iOS #objective-c #push-уведомление #синтаксический анализ-платформа

Вопрос:

Я пытаюсь отправлять пользователям push-уведомления, если одно из их любимых блюд появляется в меню ресторана в определенный день. Например, если пользователь перечисляет пиццу, спагетти и картофель в качестве своих любимых блюд, а в определенный день в меню присутствует пицца, пользователь получит push-уведомление.

Вот как я в настоящее время сохраняю любимые блюда

 PFInstallation *installation = [PFInstallation currentInstallation];
    [installation addUniqueObject:foodName forKey:@"favorites"];
    [installation saveInBackground];
  

В доступных функциях я нашел эти, но после более тщательного изучения они, похоже, не то, что мне нужно

 - (void)whereKey:(NSString *)key containedIn:(NSArray *)array;
- (void)whereKeyExists:(NSString *)key;
  

(Я буду использовать облачный код для извлечения данных, но я предполагаю, что существует аналогичный метод javascript.)

Есть ли способ получить запрос ко всем объектам установки, содержащим данный элемент в их массиве избранного?

Кроме того, хотя я сопоставляю каждого пользователя с массивом продуктов питания, кажется более интуитивным сопоставлять каждое блюдо с массивом соответствующих пользователей. Однако я не хочу, чтобы пользователи вводили данные для входа, поэтому я пытаюсь избегать класса PFUser, и я не знаю, есть ли другой способ добавления пользователя в массив. Мне интересно, возможно ли это, и упростит ли это извлечение информации.

Ответ №1:

Согласно документации по запросам к значениям массива, если вы хотите найти строки, в которых значение существует в массиве:

 [query whereKey:@"favorites" equalTo:@"pizza"];
  

Это вернет все строки, где «пицца» находится в столбце массива «избранное».

Комментарии:

1. Вместо идентичных совпадений, если бы я хотел проверить, содержится ли выбранное слово в названии блюда — например, если пользователь выбирает «пиццу», он должен получить уведомление о «пицце с сыром», «пицце с пепперони» и т.д. — разделил бы я блюдо на массив отдельных слов и использовал бы whereKey:containedIn:

2. Это, безусловно, создает некоторые интересные проблемы, звучит достойно нового вопроса.

Ответ №2:

вы можете использовать класс PFRelation на Parse.com для реляционных запросов.

а для запроса вы можете использовать блоки (извините, это в кодировке swift)

 let query : PFQuery = PFQuery(className: "GameScore")
query.whereKey("favorite", containedIn: ["item1", "item2"])
query.findObjectsInBackgroundWithBlock({(objects: AnyObject[]!, error: NSError!) in
      // your code      
})