#ios #realm
#iOS #область
Вопрос:
Пример отношения Realm: People.Dogs.FavouriteFoods
которые являются строго односторонними -> RLMArrays
У меня есть:
let result = RLMResult<People>
из предыдущей операции.
и у меня есть массив FavoriteFood.Идентификаторы, выбранные пользователем
let selectedIDs: [String]
Теперь я пытаюсь отфильтровать / предикатировать этот результат, но вместо возврата People
, который у меня уже есть, я пытаюсь получить объекты FavoriteFood, которые пересекаются с selectedIDs
Я могу найти только руководства, которые объясняют, как сортировать / фильтровать, RLMResults<People>
где результат People
, т. Е. такой же, как общий тип в RLMResult.
Моя цель состоит в том, чтобы, в конце концов, создать список, в котором я могу сказать «Из 14 любимых продуктов, которые есть у собак человека А, 7 из них находятся в списке выбранных идентификаторов» и т.д. для пользователя B, C, D…
Я хочу что-то вроде: "ANY dogs.favouriteFoods.ID in selectedIDs"
но он должен возвращать все любимые продукты, соответствующие предикату для отдельного человека, вместо всех людей, у которых есть собаки, имеющие эти конкретные любимые продукты.
Возможно ли это сделать в качестве предиката? Есть ли способ изменить концепцию, чтобы вместо этого запрашивать избранные продукты, или я должен перебирать всех людей, собак, избранные продукты и вручную подсчитывать это?
Спасибо за любую предоставленную помощь.
Комментарии:
1. Не уверен, что я полностью понимаю вопрос, но позвольте мне задать это: предположим, у вас есть список любимых блюд, и одно из них — «печенье». Есть ли у вас в настоящее время способ запросить любимые блюда , чтобы вернуть собак, чье «печенье» является их любимым блюдом?
2. @Jay Нет, к сожалению, нет, я пытался выразить это, сказав, что отношения строго односторонние. Да, если бы существовали такие родительские отношения, было бы намного проще просто перебирать все продукты, которые соответствуют, а затем фильтровать сначала собаками, а затем людьми. Я подозреваю, что данные были экспортированы из другой базы данных в Realm и что все эти отношения должны быть сглажены :/
3. Ваше объяснение было хорошим, просто хотел убедиться. У вас есть несколько вариантов. Одна из возможностей заключается в том, что, поскольку вы знаете одностороннюю связь, загрузите все эти данные и создайте обратную связь. например, загрузите в person, а затем выполните итерацию по их списку dogs. Для каждой собаки вы знаете, что это любимая еда, поэтому добавьте свойство обратной связи к еде, а затем обновите его, чтобы указать обратно на собаку. Второй вариант — сгенерировать список объектов путем перебора вашего набора данных. Это довольно неэффективно, но было бы выполнимо. Сколько это данных? 100 объектов? 1 Млн объектов?
4. около 200 КБ, этого достаточно, чтобы оправдать небольшую осторожность при реализации. Обычно это не проблема с Realm, если я могу свести это к управляемому RLMResult, прежде чем начинать перебирать дочерние элементы и извлекать их в память. Но в этом случае я не вижу, как. Как только я начинаю вложение циклов, O (n) переходит в O (n в квадрате)