如何搜寻不明儿童

时间:2019-05-19 19:03:02

标签: swift firebase firebase-realtime-database

在我的应用中,我希望给用户提供自己列出的可能性。举一个简单的例子,想象一下您的标准列表应用。用户可以创建自己的自定义列表,并将所需的内容放入其中。我希望用户能够搜索所有列表以查看其中是否有项目。例如,牛奶既可以在购物清单中,也可以在煎饼食谱中。因此,在此示例中,我想搜索用户创建的所有列表,并获取包含牛奶

的列表的名称。

我目前具有这样的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 个答案:

答案 0 :(得分:3)

简化列表解决方案是更改结构以匹配所需的查询类型,和/或添加其他结构。这是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"

采用这种结构,可以很容易地为Milk的objectName查询所有对象,并且还会告诉您它属于哪个list_id。

您甚至可以为您的对象指定一个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,并且确切知道它出现在哪个列表中。这样可以完全避免查询,而且非常轻巧。

答案 1 :(得分:2)

您将必须对所有列表进行线性搜索

搜索每个项目的食品杂货列表,看看是否有任何对象被命名为“牛奶”:82654829是,72819278是,....

在pancakeRecipe中搜索每个项目,以查看是否有任何对象被命名为“牛奶”:

在每个项目中搜索“待办事项”,以查看是否有任何对象被命名为“牛奶”