Как искать неизвестного ребенка - PullRequest
0 голосов
/ 19 мая 2019

В моем приложении я хочу дать пользователям возможность создавать свои собственные списки. Ради простого примера, представьте ваше стандартное приложение со списком. Пользователи могут создавать свои собственные пользовательские списки и помещать в них то, что они хотят. Я хочу, чтобы пользователи могли искать во всех списках, чтобы увидеть, есть ли элемент в нем. Например, молоко может быть как в списке покупок, так и в рецепте блинов. Поэтому в этом примере я хотел бы выполнить поиск по всем спискам, которые создал пользователь, и получить обратно имя списков, содержащих milk

В настоящее время у меня есть структура Firebase, подобная этой:

   {
    "userLists" : {
        "vBbYFkxrj8UTmBiUxKsjNSw8YBs2" : {
          "groceryList" : {
            "82654829" : {
              "amount" : "1",
              "objectName" : "Milk"
            },    
             "72819278" : {
              "amount" : "1",
              "objectName" : "Banana"
            },
             "83917362" : {
              "amount" : "2",
              "objectName" : "Apple"
              }    
            },
              "pancakeRecipe" : {
            "12986530" : {
              "amount" : "1",
              "objectName" : "Milk"
            },
               "1087527" : {
              "amount" : "1",
              "objectName" : "Flour"
            },
             "10985255" : {
              "amount" : "1",
              "objectName" : "Egg"
            }
           },
           "To do" : {
            "12984762" : {
              "objectName" : "Mow lawn"
            },
            "12984762" : {
              "objectName" : "Wash car"
            },    
             "98129854" : {
              "objectName" : "Pay bills"
            },
          }
         },
      "users" : {
        "vBbYFkxrj8UTmBiUxKsjNSw8YBs2" : {
          "Address" : "Kings Road 123",
          "Email" : "a@a.no",
          "Name" : "John Doe",
          "Phone" : "11223344"
        }
      }

Ответы [ 2 ]

3 голосов
/ 19 мая 2019

Самое простое решение - изменить структуру в соответствии с типом запроса, который вы хотите, и / или добавить дополнительную структуру (и).Это очень распространенный метод в базах данных NoSQL.

lists
   list_id_0
      name: "Grocery List"
   list_id_1
      name: "Pancake Recipe"
   list_id_2
      name: "To Do"

object_lists
  autoId_0
     amount: 1
     objectName: "Milk"
     list_id: "list_id_0"
  autoId_1
     amount: 1
     objectName: "Banana"
     list_id: "list_id_0"
  autoId_2
     amount: 1
     objectName: "Apple"
     list_id: "list_id_0"
  autoId_3
     amount: 1
     objectName: "Milk"
     list_id: "list_id_1"
  autoId_4
     amount: 1
     objectName: "Flour"
     list_id: "list_id_1"

, и с этой структурой можно легко запрашивать все объекты для objectName of Milk, и это также скажет вам, к какому list_id он принадлежит.

Вы могли бы даже пойти так далеко, чтобы присвоить своим объектам идентификатор и связать их со списками таким образом

objects
  object_id_0
     name: "Milk"
  object_id_1
     name: "Flour"
  object_id_2
     name: "Banana"

lists_of_objects
   list_id_0
      object_id_0: true
      object_id_1: true

, а затем выполнить запрос для каждого списка, где object_id_0 имеет истинное значение

Ох, но подождите .. это еще не все!Проверьте это

objects_and_their_lists
   object_id_0  
      list_id_0: true
      list_id_1: true

и с этой структурой, если вы знаете object_id (молоко в данном случае), вы можете просто извлечь object_id_0 из этой структуры и точно знать, в каком списке он появляется. Это позволит избежатьзапрос полностью и очень легкий.

2 голосов
/ 19 мая 2019

Вам нужно будет выполнить линейный поиск по всем спискам

Искать groceryList по каждому элементу, чтобы увидеть, называется ли какой-либо объект "Молоко": 82654829 Да, 72819278 Нет, ....

Выполните поиск pancakeRecipe для каждого элемента, чтобы увидеть, называется ли какой-либо объект "Milk":

Найдите "To do" для каждого элемента, чтобы узнать, называется ли какой-либо объект "Milk"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...