【问题标题】:Separate Queries Instead Multiple Where Clause in FirestoreFirestore 中的单独查询而不是多个 Where 子句
【发布时间】:2018-10-28 14:29:25
【问题描述】:

我想用两个参数查询 firebase firestore 数据集合。

收藏:动物

"animals": {
   "1": {
      "animal1": "cat",
      "animal2": "dog",
      "animal3": "",
      "animal4": ""
   },
   "2": {
      "animal1": "dog",
      "animal2": "cat",
      "animal3": "",
      "animal4": ""
   },
   "3": {
      "animal1": "cat",
      "animal2": "bird",
      "animal3": "dog",
      "animal4": ""
   },
   "4": {
      "animal1": "wolf",
      "animal2": "dog",
      "animal3": "bird",
      "animal4": ""
   },
   "5": {
      "animal1": "turtle",
      "animal2": "dog",
      "animal3": "wolf",
      "animal4": "cat"
   },
   "6": {
      "animal1": "dog",
      "animal2": "wolf",
      "animal3": "turtle",
      "animal4": "bear"
   },
   "7": {
      "animal1": "spider",
      "animal2": "beatle",
      "animal3": "butterfly",
      "animal4": "Cat"
   }
}

我想要获取包含 catdog 的列表数据。 有信息In here 逻辑或查询。在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并在您的应用中合并查询结果。

我不知道我需要多少个单独的查询?

let param1 = 'cat';
let param2 = 'dog';

let query1 = db.collection('animals').where('animal1', '==', param1);
let query2 = db.collection('animals').where('animal2', '==', param1);
let query3 = db.collection('animals').where('animal3', '==', param2);
let query4 = db.collection('animals').where('animal4', '==', param3);

【问题讨论】:

    标签: javascript node.js firebase nosql google-cloud-firestore


    【解决方案1】:

    正如您所指出的,“您应该为每个 OR 条件创建一个单独的查询,并在您的应用中合并查询结果”。由于您的数据模型有 4 个字段(animal1animal4),因此您需要为每个要测试的 param 值创建 4 个查询。

    所以在2个参数的情况下,如下:

    let param1 = 'cat';
    let param2 = 'dog';
    

    您必须合并 2*4 查询的结果....

    如果您更改数据模型并使用数组存储animal 值,则有可能减少此数字。然后,您可以利用 array_contains 运算符。

    建议的数据模型:

    "animals": {
       "1": {
          "animalArray": 
              [
                 0: "cat",
                 1: "dog"
              ] 
       },
       "2": {
          "animalArray": 
              [
                 0: "turtle",
                 1: "dog",
                 2: "wolf",
                 3: "bear",
              ]
       }
       .....
    }
    

    以我们的两个params 为例,您只需要两个查询,如下所示:

    let query1 = db.collection('animals').where("animalArray", "array-contains", param1);
    let query2 = db.collection('animals').where("animalArray", "array-contains", param2);
    

    【讨论】:

    • 谢谢雷诺。问题是我的数据模型结构。并且使用数组和数组包含似乎更好。此外 2*4 查询对性能来说非常重...
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多