gpt4 book ai didi

swift - 使用多个条件查询 Firebase

转载 作者:搜寻专家 更新时间:2023-11-01 07:07:58 25 4
gpt4 key购买 nike

我正在开发 iOS 应用程序。为此,我有一个包含成分和食谱的 firebase 数据库。不难想象;一个食谱有与之关联的子配料,一个配料可以包含在多个食谱中。我的 JSON 结构示例如下:

    {
"ingredients" : {
"chicken" : {
"meal1" : true,
"meal2" : true
},
"beef" : {
"meal2" : true
},
"lamb" : {
"meal1" : true,
"meal3" : true
}
},
"meals" : {
"meal1" : {
"ingredients" : {
"chicken" : true,
"lamb" : true
}
},
"meal2" : {
"ingredients" : {
"chicken" : true,
"beef" : true
},
"meal3" : {
"ingredients" : {
"lamb" : true
}
}
}

问题:查询包含用户选择的一组成分的食谱列表并将它们添加到食谱对象数组中的最佳做法是什么没有 引入重复的食谱?我正在寻找至少包含 1 种配料匹配的所有食谱。

示例:用户正在从我的示例数据库中搜索包括“鸡肉”和“牛肉”在内的食谱,我希望返回食谱 1 和食谱 2。食谱 2 包括鸡肉和牛肉,所以我不希望它被两次拉入搜索结果。

我的第一个想法是查询第一个鸡肉下的所有餐点,然后查询牛肉下的所有餐点,然后执行某种功能来删除重复项。在我看来,这不是一个好的解决方案,因为您可能会生成多个重复的餐点,理论上您必须将其删除。有没有更好的办法?

最佳答案

Firebase 本身不提供使用多个查询或链的方法。这可以防止您过多地降低应用程序的速度。 (我们应该为此感到高兴)。

现在仍然可以通过三种不同的方式获得所需的结果。

  1. 前端查询: 如果您不希望拥有大量数据,这可能是实现您目标的最简单方法。不要羞于使用它们,它们可以非常有效。

  2. 数据结构: 第二种方法是重构您的数据库。相信我,您可以通过这种方式实现所有可以想象的查询链

  3. 结合这两种方法。有时您可以构建一个结构来减少返回值的数量,然后使用前端查询来完成其余的工作。

在您的例子中,您已经有了一个非常好的结构。因此,假设用户正在搜索 lambchicken,您可以调用这些节点并在前端进行某种合并。

但是是的,它可能会更快。最好的方法可能是镜像您的数据。您可以创建像 chicken-lambchickenlamb 这样的节点,然后直接调用它们。当然,这最终会产生大量数据,但速度非常快。

假设用户搜索chickenbeeflamb。您只需创建一个字母数字顺序来获取节点:/beef-chicken-lamb

按照这种方法,您可以避免任何查询。因此,如果您真的对性能感兴趣,这是一种很棒的方法。

关于swift - 使用多个条件查询 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46942169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com